全局PreviewKeyDown处理程序与本地PreviewKeyDown处理程序

时间:2009-09-22 00:54:18

标签: c# .net wpf events navigation

我的主窗口上有一个PreviewKeyDown处理程序,它处理上下键,因此我可以在控件之间使用键盘进行导航。

现在我遇到的问题是,在某些文本框中我还想使用向上/向下键。这似乎是不可能的,因为其他处理程序似乎首先吞下了键。

当其中一个TextBox控件被聚焦时,它们是否有可能首先获得向上/向下键,然后吞下它们以便“全局”PreviewKeyDown不能获取它们?

当然,当这样的TextBox获得焦点时,我可以以某种方式禁用全局处理程序,但这是一种好的风格吗?

1 个答案:

答案 0 :(得分:1)

除了在全局密钥处理程序中过滤掉这些密钥之外,你真的没有选择。

您遇到此问题的原因是所有Preview *事件都是隧道,这意味着可视树中较高的控件首先获取它们(从根开始)。你首先使用这个事件的原因是你的问题。

一个不太理想的选择是为TextBox.PreviewKeyDown注册一个类处理程序(参见EventManager.RegisterClassHandler())。虽然这将在您的窗口PreviewKeyDown处理程序之前调用,但它将在您的应用程序中为所有TextBoxes调用。这可能与你想要的不同。