在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] 举报,一经查实,本站将立刻删除。