如何在触发键盘快捷键 ( Ctrl+F7 ) 时触发事件?

How can i trigger a event when a keyboard shortcut ( Ctrl+F7 ) is fired?

我想在我的应用程序中有人使用快捷键 Ctrl+F7 时获取事件。因为我的应用程序中有设置,所以我不希望任何人能够更改,但如果他必须更改这些设置,我可以为他提供键盘快捷键。

我的应用程序如何知道,当 CTRL+F7 被触发时(当快捷方式被触发时应用程序有焦点。)

您可以重写主要 window 的 OnPreviewKeyDown 方法:

protected override void OnPreviewKeyDown(KeyEventArgs e)
{
    base.OnPreviewKeyDown(e);
    if (e.Key == Key.F7 && (Keyboard.IsKeyDown(Key.LeftCtrl) || Keyboard.IsKeyDown(Key.LeftCtrl)))
    {
        //...
    }
}

如果您的应用程序有多个顶级 windows,您可以创建一个通用基础 class,您可以在其中覆盖该方法,然后从该方法继承所有 windows:

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>

您可以像这样使用热键绑定命令:

<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
}