首页 > 后端开发 > C++ > 如何将焦点从ViewModel设置为WPF TextBox?

如何将焦点从ViewModel设置为WPF TextBox?

Susan Sarandon
发布: 2025-01-26 01:41:09
原创
794 人浏览过

How to Set Focus to a WPF TextBox from the ViewModel?

在WPF中从ViewModel设置TextBox焦点

问题:

在WPF应用程序中,当条件失败时向用户显示错误消息后,目标是将焦点设置回特定的TextBox。但是,当前使用System.Windows.Input.Keyboard.Focus的方法不起作用。

疑问:

如何在WPF中从ViewModel设置TextBox的焦点?

解答:

第一部分:可访问性考虑

需要注意的是,在ViewModel中直接引用UI元素(例如,cs.txtCompanyID)违反了MVVM模式,并可能导致可访问性问题。相反,应依赖数据绑定机制与UI进行通信。

第二部分:调试.NET源代码

为了有效地排除焦点问题,请考虑调试.NET源代码。请参考Shawn Bruke的博客,了解如何启用.NET源代码调试。

第三部分:使用附加属性

从ViewModel设置焦点的有效方法是使用附加属性。创建一个名为IsFocused的附加属性,并使用以下实现:

<code class="language-csharp">public static class FocusExtension
{
    public static bool GetIsFocused(DependencyObject obj) {...}
    public static void SetIsFocused(DependencyObject obj, bool value) {...}

    public static readonly DependencyProperty IsFocusedProperty =
        DependencyProperty.RegisterAttached(...);

    private static void OnIsFocusedPropertyChanged(...) {...}
}</code>
登录后复制

在您的XAML视图中,将IsFocused附加属性绑定到ViewModel中触发焦点的属性:

<code class="language-xml"><TextBox local:FocusExtension.IsFocused="{Binding IsUserNameFocused}" /></code>
登录后复制

当ViewModel中此属性更新时,UI元素将自动获得焦点。

This revised answer maintains the image and uses more concise and natural language while preserving the original meaning. The code snippets are also retained.

以上是如何将焦点从ViewModel设置为WPF TextBox?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板