在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中文網其他相關文章!