2010-03-05 50 views
2

我有一個WPF窗口,其中左側有一列按鈕。在右側我顯示/隱藏UserControls作爲左手按鈕被點擊。WPF UserControl交換和保留鍵盤焦點

我創建了UserControls一次,然後用按鈕在它們之間切換。當我切換時,我想保留鍵盤焦點,當UserControl最後可見時。

換句話說,我點擊按鈕A並顯示UserControl A.如果我將鍵盤焦點移動到該用戶控件的文本框中,然後單擊按鈕B,做一些工作,然後再次單擊按鈕A我希望重點關注與我上次在UserControl A中使用的相同的文本框。

關於如何完成此操作的任何想法?

回答

3

聲明一個字典,其中的鍵是一個左側按鈕和當前集中控制的值。當單擊按鈕時,獲取當前聚焦的元素並將其設置在字典中(其中鍵是先前單擊的按鈕)。更改顯示的用戶控件,並使用剛纔單擊的按鈕來讀取字典。如果此條目有控制權,請將焦點設置爲該條目。

使用FocusManager.FocusedElement知道哪個控件具有焦點(實際上是一個IInputElement,它應該是字典值的類型)和FocusManager.SetFocusedElement將焦點放回(或在控件上調用Focus())。

+0

太棒了。你的建議使我朝着正確的方向前進。我需要弄清楚的唯一一件事就是我需要在所有UserControl上設置FocusManager.IsFocusScope =「True」,並將它們用作FocusManager調用中的DependencyObject。然後我遵循你的邏輯,並且必須另外調用UserControl獲得焦點上的Focus()作爲最後一步。 謝謝Timores! – BrettRobi 2010-03-05 23:27:17

+0

不客氣,對於不瞭解IsFocusScope感到抱歉。 – Timores 2010-03-05 23:32:28