wpf viewmodel中控制页面焦点
  GAdBlbqXS7XT 2023年11月02日 31 0
public static class FocusBehavior
    {
        private static Dictionary<UIElement, RoutedEventHandler> handlers = new Dictionary<UIElement, RoutedEventHandler>();
        public static bool? GetIsFocused(DependencyObject obj)
        {
            return (bool?)obj.GetValue(IsFocusedProperty);
        }
        public static void SetIsFocused(DependencyObject obj, bool? value)
        {
            obj.SetValue(IsFocusedProperty, value);
        }
        public static readonly DependencyProperty IsFocusedProperty =
                    DependencyProperty.RegisterAttached(
                    "IsFocused",
                    typeof(bool?),
                    typeof(FocusBehavior),
                    new UIPropertyMetadata()
                    {
                        DefaultValue = null,
                        PropertyChangedCallback =
                            (s, e) =>
                            {
                                UIElement sender = (UIElement)s;
                                RoutedEventHandler x;
                                if (!handlers.TryGetValue(sender, out x))
                                {
                                    Attach(sender);
                                }
                                if ((bool)e.NewValue)
                                {
                                    sender.Focus();
                                    Keyboard.Focus(sender);
                                }
                            }
                    });
        private static void Attach(UIElement sender)
        {
            RoutedEventHandler handler = (s, e) =>
            {
                UIElement ui = (UIElement)s;
                if (e.RoutedEvent == UIElement.GotFocusEvent)
                {
                    ui.SetValue(IsFocusedProperty, true);
                }
                if (e.RoutedEvent == UIElement.LostFocusEvent)
                {
                    ui.SetValue(IsFocusedProperty, false);
                }
            };
            sender.GotFocus += handler;
            sender.LostFocus += handler;
            handlers.Add(sender, handler);
        }
    }

注意引用名称空间

xmlns:localHelper="clr-namespace:Test.Helper"

页面绑定此属性,注意需要双向绑定

<TextBox TabIndex="4" localHelper:FocusBehavior.IsFocused="{Binding ISFocusable5,Mode=TwoWay}"/>

[参考]
C# WPF MVVM 实战 – 5- 用绑定,通过 VM 设置 View 的控件焦点

留待后查,同时方便他人

【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

推荐阅读
GAdBlbqXS7XT