首页 > 后端开发 > C++ > 如何从视图模型将焦点设置到 WPF 文本框?

如何从视图模型将焦点设置到 WPF 文本框?

DDD
发布: 2025-01-26 01:51:08
原创
797 人浏览过

How to Set Focus to a WPF TextBox from the View Model?

在 WPF 中从视图模型设置 TextBox 焦点

问题:

我在尝试从 WPF 应用程序的视图模型设置 TextBox 控件的焦点时遇到问题。在某个按钮点击后,我需要向用户显示一条消息,然后将光标设置到 TextBox 控件,但是光标没有被设置。以下是相关的代码:

<code class="language-c#">if (companyref == null)
{
    var cs = new Lipper.Nelson.AdminClient.Main.Views.ContactPanels.CompanyAssociation();

    MessageBox.Show("Company does not exist.", "Error", MessageBoxButton.OK,
                    MessageBoxImage.Exclamation);

    cs.txtCompanyID.Focusable = true;

    System.Windows.Input.Keyboard.Focus(cs.txtCompanyID);
}</code>
登录后复制

答案:

需要考虑几个可能的问题:

  1. 在视图模型中引用 UI: 通常情况下,不建议在视图模型中直接引用 UI 元素。相反,请考虑使用其他方法,例如附加属性或数据绑定。

  2. .NET 源代码调试: 为了排除焦点问题,启用 .NET 源代码调试非常有价值。这允许您逐步执行代码,并精确查明焦点未正确设置的位置。

  3. 附加属性解决方案: 一种简单的方法是使用附加属性来跟踪和从视图模型设置焦点。以下是一个示例:

<code class="language-c#">public static class FocusExtension
{
    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(FocusExtension),
            new UIPropertyMetadata(false, OnIsFocusedPropertyChanged));

    private static void OnIsFocusedPropertyChanged(
         DependencyObject d,
         DependencyPropertyChangedEventArgs e)
    {
        var uie = (UIElement)d;
        if ((bool)e.NewValue)
        {
            uie.Focus(); // 不关心 false 值。
        }
    }
}</code>
登录后复制

然后,您可以在视图中将此属性绑定到您的视图模型:

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

This revised answer maintains the original image and formatting while rewording the text for improved clarity and flow. The code examples are unchanged.

以上是如何从视图模型将焦点设置到 WPF 文本框?的详细内容。更多信息请关注PHP中文网其他相关文章!

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