2010-11-02 44 views
2

爲什麼當我沒有懸停在按鈕或任何東西上時,第一個按鈕「激活」。這似乎發生在我更改標籤後。來自ViewModel的焦點控制

alt text

我懷疑,當我改變標籤,它關注的第一個控制。是這樣嗎?我正在開發一個MVVM應用程序,所以從我的視圖模型中,我可以如何專注於文本框呢?

回答

2

由於WPF的焦點概念有點複雜,我有一個名爲FocusEnforcer的類。

無論如何,它確實能確保所需的控制得到關注。

public static class FocusEnforcer 
{ 
    public static void EnforceFocus(UIElement element) 
    { 
     if (!element.Focus()) 
     { 

      element.Dispatcher.BeginInvoke(DispatcherPriority.Input, 
              new ThreadStart(delegate() 
                  { 
                   element.Focus(); 
                  })); 

     } 

    } 
} 
0

這種行爲只需要:行爲。或者至少有一個新的附屬財產。

  1. 爲選項卡控件創建附加屬性。
  2. 爲更改此附加屬性創建處理程序。
  3. 在此處理程序中,訂閱TabControl的SelectionChanged事件。
  4. 在SelectionChanged事件處理程序中,使用TabControl.FindName方法獲取文本框。
  5. 使用TabControl作爲焦點範圍執行FocusManager.SetFocusedElement方法。