我有一个 WPF 窗口,左侧有一列按钮。在右侧,当单击左侧按钮时,我显示/隐藏用户控件。
我已经创建了一次用户控件,然后只需使用按钮在它们之间切换即可。当我切换时,我希望将键盘焦点保留在 UserControl 最后可见时的位置。
换句话说,我单击按钮 A 并显示用户控件 A。如果我将键盘焦点移动到该用户控件中的文本框,然后单击按钮 B,做一些工作,然后再次单击按钮 A,我希望焦点位于与我上次在 UserControl A 中使用的文本框相同。
关于如何实现这一目标有什么想法吗?
最佳答案
声明一个字典,其中键是左侧按钮之一,值是当前聚焦的控件。单击按钮时,获取当前焦点元素并将其设置到字典中(键为先前单击的按钮)。更改显示的UserControl并以刚才单击的按钮读取字典。如果此条目有一个控件,请将焦点设置到它。
使用 FocusManager.FocusedElement 知道哪个控件拥有焦点(实际上是一个 IInputElement,应该是字典值的类型)并使用 FocusManager.SetFocusedElement 将焦点放回(或在控件上调用 Focus())。
关于WPF UserControl 交换并保留键盘焦点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2383721/