【问题标题】:Capturing key events in Silverlight在 Silverlight 中捕获关键事件
【发布时间】:2010-03-12 03:12:54
【问题描述】:

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

问题:当用户单击“开始”(从而使其获得焦点)时,它会隐藏并出现“重置”,“重置”按钮似乎自动获得焦点。这并不可怕,因为仍然会引发按键事件,但是焦点会导致一个大问题。如果用户按下 Space,那么按钮会将其解释为 Click 事件。

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

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

【问题讨论】:

    标签: silverlight input keyboard


    【解决方案1】:

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

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

    您可以使用视觉/选项卡顺序将隐藏的焦点捕获控件放在之前或重置按钮之后。我认为您的用户不会介意这样的想法,即在应用程序周围进行选项卡可以让他们将焦点放在与他们的输入相关的不可聚焦的用户控件上。

    【讨论】:

    • 谢谢!这就是我所做的。唯一的副作用是我似乎无法使用空格键,因为 Windows 使用它来创建 Click 事件。为了解决这个问题,我只是连接到 click 事件处理程序。为简单起见,我在 Tab 键顺序中的“重置”按钮之后创建了一个具有零大小边框和 1x1 大小的标准按钮。由于空格键/单击事件的怪异,您不能按住空格键来接收多个事件(无论如何都很容易),但在我的应用程序中这还不错。非常感谢您的回复!
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 2020-08-31
      • 1970-01-01
      • 2013-06-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-16
      • 2016-07-31
      • 2017-04-11
      相关资源
      最近更新 更多