当前位置:首页 > Windows程序 > 正文

WPF之全局快捷键

2021-03-28 Windows程序

标签:

目录 WPF快捷键实现方式

WPF快捷键实现主要有自定义快捷键命令和全局快捷键两种方式。

自定义快捷键命令方式是通过KeyBinding为命令绑定快捷键,按键组合可使用“+”进行连接。可以通过Modifiers+Key和Gesture两种方式定义快捷键组合。可以任选其一进行使用,MSDN中建议使用Gesture方式定义以免发生混淆。

<Window.InputBindings> <KeyBinding Modifiers="Control+Alt" Key="Z" Command="{StaticResource CaptureScreen}" /> <KeyBinding Gesture="Control+Alt+Q" Command="{StaticResource FullScreen}" /> </Window.InputBindings>

 

全局快捷键方式是通过调用Windows API的RegisterHotKey函数来实现全局快捷键注册,调用UnregisterHotKey函数实现全局快捷键注销。这种方式WinForm和WPF通用。和自定义命令方式不同的是这种方式是在系统范围内定义热键,而前者是在窗口范围内定义。窗口范围内定义的快捷键触发条件不仅要求窗口可见,并且要求窗口获取键盘焦点。这里引入的问题是,如果命令的目标不具备获取键盘焦点的能力,则命令将会无效。并且,和系统范围内定义的快捷键相冲突时,优先级要低。

如果是Ribbon界面菜单,推荐使用自定义快捷键命令的方式。通过CanExecute方法控制当前命令在目标元素上是否可用,目标元素显示可用或禁用状态。如果是窗口无焦点下触发快捷键,则只能选用全局快捷键方式了。

全局快捷键设置界面

以下是热键设置的界面。接下来对全局快捷键的实现分步骤说明。

 

这是XAML页面的代码,这里有界面元素的定义。

......  <ItemsControl Margin="10" ItemsSource="{Binding HotKeyList,ElementName=win}"> <ItemsControl.ItemTemplate> <DataTemplate> <Grid Margin="7"> <Grid.ColumnDefinitions> <ColumnDefinition Width="Auto" /> <ColumnDefinition Width="Auto" /> <ColumnDefinition Width="Auto" /> <ColumnDefinition Width="Auto" /> <ColumnDefinition Width="Auto" /> </Grid.ColumnDefinitions> <CheckBox Grid.Column="0" Content="{Binding Name}" IsChecked="{Binding IsUsable}" Style="{StaticResource ckbStyle1}" /> <CheckBox Grid.Column="1" Content="Ctrl" IsChecked="{Binding IsSelectCtrl}" IsEnabled="{Binding IsUsable}" Style="{StaticResource ckbStyle2}" /> <CheckBox Grid.Column="2" Content="Shift" IsChecked="{Binding IsSelectShift}" IsEnabled="{Binding IsUsable}" Style="{StaticResource ckbStyle2}" /> <CheckBox Grid.Column="3" Content="Alt" IsChecked="{Binding IsSelectAlt}" IsEnabled="{Binding IsUsable}" Style="{StaticResource ckbStyle2}" /> <ComboBox Grid.Column="4" ItemsSource="{Binding Keys}" SelectedItem="{Binding SelectKey}" IsEnabled="{Binding IsUsable}" Style="{StaticResource cmbStyle1}" /> </Grid> </DataTemplate> </ItemsControl.ItemTemplate> </ItemsControl> ......

温馨提示: 本文由Jm博客推荐,转载请保留链接: https://www.jmwww.net/file/68988.html