WPF UserControl交换并保留键盘焦点

时间:2010-03-05 00:22:27

标签: wpf focus user-controls

我有一个WPF窗口,左侧有一列按钮。在右侧,我显示/隐藏UserControls,因为单击了左手按钮。

我创建了一次UserControls然后只需用按钮在它们之间切换。当我切换时,我希望将键盘焦点保持在最后一次可见的UserControl时。

换句话说,我点击按钮A并显示UserControl A.如果我将键盘焦点移动到该UserControl中的文本框,然后单击按钮B,做一些工作,然后再次单击按钮A我想重点放在我上次在UserControl A中使用的相同文本框。

关于我如何实现这一目标的任何想法?

1 个答案:

答案 0 :(得分:3)

声明一个字典,其中键是左侧按钮和当前聚焦控件的值。单击一个按钮时,获取当前聚焦的元素并将其设置在字典中(键是以前单击的按钮)。更改显示的UserControl并使用只需单击按钮的键读取字典。如果有此条目的控件,请将焦点设置为它。

使用FocusManager.FocusedElement知道哪个控件具有焦点(实际上是一个IInputElement,它应该是字典值的类型)和FocusManager.SetFocusedElement来将焦点放回(或者在控件上调用Focus())。