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