捕获Silverlight中的关键事件

时间:2009-08-21 22:58:12

标签: silverlight input keyboard

背景:我有一个应用程序,我希望能够捕获键盘事件。在主屏幕上,用户单击“开始”按钮。在游戏过程中,“开始”按钮消失,显示“重置”按钮(两个控件上的“可见性更改”)。这是唯一的两个标准控件,因为所有其他都是不可聚焦的用户控件。

问题:当用户单击“开始”(从而使其聚焦),然后隐藏并显示“重置”时,“重置”按钮自动似乎获得焦点。由于关键的新闻事件仍然存在,这并不是很糟糕,但重点引发了一个大问题。如果用户按空格键,则该按钮将其解释为Click事件。

如果我将KeyUp和KeyDown的处理程序添加到按钮本身并将事件设置为Handled,如果我按住空格然后放开它将会吞下事件,但是如果我只是点击它就不会。

问题:我如何阻止Space激活按钮,同时仍能响应我应用中的Space?

2 个答案:

答案 0 :(得分:1)

考虑创建一个简单的自定义控件,或使用可以设置IsHitTestVisible="True"的控件。然后,将它放在同一个Grid中的某个位置,并连接到它想要捕获的关键事件和其他输入事件。

为了确保焦点转到“隐身”控件,您可以在按下“开始”按钮后调用(yourControlsNameHere).Focus()

您可以使用视觉/标签顺序将隐藏的焦点捕捉控件放在之前,放在重置按钮之后。我不认为您的用户会想到围绕应用程序进行选项卡可能会让他们将注意力放在他们的输入相关的非焦点用户控件上。

答案 1 :(得分:0)

您可以将两个按钮的IsTabStop属性设置为false(例如,按下“开始”按钮时)。这样他们就无法获得焦点,也永远不会处理键盘事件。

http://msdn.microsoft.com/en-us/library/system.windows.controls.control.istabstop%28VS.95%29.aspx