首頁 > 後端開發 > 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
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板