如何在触发键盘快捷键 ( 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
}
我想在我的应用程序中有人使用快捷键 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
}