2009-08-21 61 views
2

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

问题:当用户点击开始(从而给它聚焦),然后它隐藏和重置出现,重置按钮自动似乎获得焦点。这不是很糟糕,因为重要的新闻事件仍然存在,但重点导致了一个大问题。如果用户按下空格,则该按钮将其解释为Click事件。

如果我将KeyUp和KeyDown的句柄添加到按钮本身并将事件设置为Handled,那么如果我按住空格并放开,则会吞下该事件,但如果我只是轻点它,则不会。

问题:如何防止空间激活按钮,同时仍然能够响应我的应用程序中的空间?

回答

1

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

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

您可以用视觉/标签为了工作,要么把你隐藏,重点捕捉 Reset按钮控制之前。我不认为你的用户会介意围绕应用程序选项卡让他们把焦点放在它们输入相关的非可聚焦用户控件上。

+0

谢谢!这就是我所做的。唯一的副作用是,我似乎无法使用空格键,因为Windows使用它来创建Click事件。为了解决这个问题,我只连接了点击事件处理程序。为了简单起见,我创建了一个标准按钮,它具有零大小的边框和按Tab键顺序排列的按钮后的1x1大小。由于空格键/点击事件的怪异性,您无法按住空格键来接收多个事件(无论如何),但在我的应用程序中并不算太糟糕。 非常感谢您的回复! – 2009-08-24 20:22:46