WPF UserControl 交换并保留键盘焦点

标签 wpf focus user-controls

我有一个 WPF 窗口,左侧有一列按钮。在右侧,当单击左侧按钮时,我显示/隐藏用户控件。

我已经创建了一次用户控件,然后只需使用按钮在它们之间切换即可。当我切换时,我希望将键盘焦点保留在 UserControl 最后可见时的位置。

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

关于如何实现这一目标有什么想法吗?

最佳答案

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

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

关于WPF UserControl 交换并保留键盘焦点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2383721/

相关文章:

wpf - 使用 MVVM 和 WPF 登录 - 登录对象必须在其他窗口中使用。 (全局化)

javascript - 如何检查窗口是否有焦点?

javascript - 关注下一个可用的 div

asp.net - 在呈现的 HTML 中为自定义 UserControl 提供一个 ID

c# - WPF - 仅当超链接被禁用时如何在超链接上显示工具提示

c# - 按钮内的图像和标签在单击事件 wpf 上更新

c# - 使 Button IsEnabled 状态取决于两个文本框

c# - WPF - 没有焦点的滚动

asp.net - 如何在 ASP.NET 中的 Web 应用程序之间共享用户控件?

c# - 将 WPF UserControl 另存为矢量图像