Csharp/C#教程:Windowsapp store应用中的页面全局键盘事件分享


Windowsapp store应用中的页面全局键盘事件

我正在开发一款游戏,一个基于WPF的Windowsapp store应用,用C#编写。 当玩家按下Esc键时,我想暂停游戏并显示一个菜单(继续,退出等)。

听起来很简单。 可悲的是,事实并非如此。

游戏在Windows.UI.Xaml.Controls.Page ,主要由Canvas的数百个Shape组成,但没有单个ButtonTextBox或其他任何支持键盘交互的Shape 。 唯一的互动是点击或点击形状。

我需要为整个页面全局捕捉键盘事件,无论焦点是什么元素,或者根本没有任何焦点等等。每当按下Esc键时,必须触发一个事件。

我尝试了什么:

任何想法或解决方案?

尝试使用CoreWindow.KeyDown 。 在页面中分配处理程序,我相信它应该拦截所有keydown事件。

 public MyPage() { CoreWindow.GetForCurrentThread().KeyDown += MyPage_KeyDown; } void MyPage_KeyDown(CoreWindow sender, KeyEventArgs args) { Debug.WriteLine(args.VirtualKey.ToString()); } 

CoreWindow.GetForCurrentThread()。如果焦点位于其他某个grid / webView /文本框上,KeyDown将不会捕获事件,因此请使用AcceleratorKeyActivated事件。 无论焦点在哪里,它总能捕捉到事件。

上述就是C#学习教程:Windowsapp store应用中的页面全局键盘事件分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!

 public MyPage() { Window.Current.CoreWindow.Dispatcher.AcceleratorKeyActivated += AcceleratorKeyActivated; } private void AcceleratorKeyActivated(CoreDispatcher sender, AcceleratorKeyEventArgs args) { if (args.EventType.ToString().Contains("Down")) { var ctrl = Window.Current.CoreWindow.GetKeyState(VirtualKey.Control); if (ctrl.HasFlag(CoreVirtualKeyStates.Down)) { switch (args.VirtualKey) { case VirtualKey.A: Debug.WriteLine(args.VirtualKey); Play_click(sender, new RoutedEventArgs()); break; } } } } 

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/cdevelopment/953760.html

(0)
上一篇 2021年11月19日
下一篇 2021年11月19日

精彩推荐