当我的应用程序中的某人使用快捷键Ctrl + F7时,我想获取事件。因为我的应用程序中有设置,所以我不希望任何人都能更改,但是如果他必须更改这些设置,我可以为他提供键盘快捷键。
在触发CTRL + F7时,我的应用程序如何了解(在触发快捷方式时,应用程序具有焦点。)
答案 0 :(得分:0)
您可以覆盖主窗口的OnPreviewKeyDown
方法:
protected override void OnPreviewKeyDown(KeyEventArgs e)
{
base.OnPreviewKeyDown(e);
if (e.Key == Key.F7 && (Keyboard.IsKeyDown(Key.LeftCtrl) || Keyboard.IsKeyDown(Key.LeftCtrl)))
{
//...
}
}
如果您的应用程序具有几个顶级窗口,则可以创建一个通用基类,在该类中您可以重写该方法,然后从该类继承所有窗口:
public abstract class AppWindow : Window
{
protected override void OnPreviewKeyDown(KeyEventArgs e)
{
base.OnPreviewKeyDown(e);
if (e.Key == Key.F7 && (Keyboard.IsKeyDown(Key.LeftCtrl) || Keyboard.IsKeyDown(Key.LeftCtrl)))
{
//...
}
}
}
public partial class MainWindow : AppWindow
{
public MainWindow()
{
InitializeComponent();
}
}
XAML:
<local:AppWindow x:Class="WpfApp1.MainWindow">...</local:AppWindow>
答案 1 :(得分:0)
您可以将命令绑定与热键一起使用,如下所示:
<Window.CommandBindings>
<CommandBinding Command="{x:Static local:CustomCommands.ShortCutCommand}" Executed="CommandBinding_Executed_1" CanExecute="CommandBinding_CanExecute" />
</Window.CommandBindings>
<Window.InputBindings>
<KeyBinding Command="{x:Static local:CustomCommands.ShortCutCommand}" Key="F7" Modifiers="Ctrl" />
</Window.InputBindings>
MainWindow.cs
public static RoutedCommand ShortCutCommand= new RoutedCommand();
private void CommandBinding_CanExecute(object sender, CanExecuteRoutedEventArgs e)
{
e.CanExecute = true;
}
private void CommandBinding_Executed_1(object sender, ExecutedRoutedEventArgs e)
{
//do something here
}