我的主窗口上有一个PreviewKeyDown处理程序,它处理上下键,因此我可以在控件之间使用键盘进行导航。
现在我遇到的问题是,在某些文本框中我还想使用向上/向下键。这似乎是不可能的,因为其他处理程序似乎首先吞下了键。
当其中一个TextBox控件被聚焦时,它们是否有可能首先获得向上/向下键,然后吞下它们以便“全局”PreviewKeyDown不能获取它们?
当然,当这样的TextBox获得焦点时,我可以以某种方式禁用全局处理程序,但这是一种好的风格吗?
答案 0 :(得分:1)
除了在全局密钥处理程序中过滤掉这些密钥之外,你真的没有选择。
您遇到此问题的原因是所有Preview *事件都是隧道,这意味着可视树中较高的控件首先获取它们(从根开始)。你首先使用这个事件的原因是你的问题。
一个不太理想的选择是为TextBox.PreviewKeyDown
注册一个类处理程序(参见EventManager.RegisterClassHandler())。虽然这将在您的窗口PreviewKeyDown
处理程序之前调用,但它将在您的应用程序中为所有TextBoxes
调用。这可能与你想要的不同。