微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

WPF中的应用程序级别快捷键

在WPF应用程序中,我目前正试图绑定一个命令来启动一个计算器工具窗体,在应用程序的任何地方使用快捷键,我已经创build了一个命令,但没有得到如何映射命令和快捷键来在我的应用程序中创build通用的快捷键。 提前致谢。

Windows 10虚拟机上的Visual Studio性能较差

有效字幕文本颜色 – 检测变化(在.Net中)

从Win XP以编程方式从C#中注销用户

应用程序在Windows上存储大型数据库的适当位置在哪里?

.NET WPF记住会话之间的窗口大小

CommandManager希望使用聚焦控件作为路由所有输入绑定的起点。

我写了一个行为,允许您使用RoutedCommand(标准WPF)和ICommand(MVVM样式)轻松地绑定全局快捷键。

WPF行为:全局应用程序快捷键

您可以在xaml中执行此操作 – 请参阅KeyBinding类文档中的示例:

<Window.InputBindings> <KeyBinding Command="ApplicationCommands.Open" Gesture="CTRL+R" /> </Window.InputBindings>

更新:如果你正在使用MVVM,看起来你实际上不能使用xaml绑定一个KeyBinding到一个viewmodel:见这里键入一个RelayCommand 。

在WPF中,为了使用快捷方式,您需要关注各自的控制器。 但是使用InputManager可以捕获应用程序的各种输入。 在这里,您不需要专注于相应的控制器。

首先,你必须提交事件。

InputManager.Current.PreProcessInput -= Current_PreProcessInput; InputManager.Current.PreProcessInput += Current_PreProcessInput;

然后,

private void Current_PreProcessInput(object sender,PreProcessInputEventArgs args) { try { if (args != null && args.StagingItem != null && args.StagingItem.Input != null) { InputEventArgs inputEvent = args.StagingItem.Input; if (inputEvent is KeyboardEventArgs) { KeyboardEventArgs k = inputEvent as KeyboardEventArgs; RoutedEvent r = k.RoutedEvent; KeyEventArgs keyEvent = k as KeyEventArgs; if (r == Keyboard.KeyDownEvent) { } if (r == Keyboard.KeyUpEvent) { } } } } catch (Exception ex) { } }

像这样,你可以过滤出所有不需要的东西,并获得所需的输入。 由于这是一个快捷方式捕获应用程序,我只采取了KeyDown和KeyUp事件。

您也可以获得按下的所有按键的详细信息

keyEvent.Key.ToString()

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐