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

时间:2019-08-26 14:13:37

标签: wpf vb.net keyboard-shortcuts

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

在触发CTRL + F7时,我的应用程序如何了解(在触发快捷方式时,应用程序具有焦点。)

2 个答案:

答案 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
}
相关问题