按住Control键时使用热键

本文关键字:Control 按住 | 更新日期: 2023-09-27 17:51:12

我正在尝试添加一些热键到我的窗口应用程序,以便如果我按Ctrl+Q它将执行一个动作。我不太明白。我通过堆栈溢出和MSDN,但我找不到我需要的答案。这就是我现在的内容

xaml:

<Grid KeyDown="Grid_KeyDown" KeyUp="Grid_KeyUp">
    <Menu Height="20" VerticalAlignment="Top" >
        <MenuItem Name="MenuItemFile"  Header="File" >
            <MenuItem Name="CloseApp" Header="Close" Icon="" Click="CloseApp_Click" AutomationProperties.AcceleratorKey="Control L" InputGestureText="Ctrl+X"/>
        </MenuItem>
c#

private void Grid_KeyDown(object sender, KeyEventArgs e)
    {
        if (e.Key == Key.LeftCtrl)
        {
            switch (e.Key)
            {
               case Key.L:
                  This.Close();
                  break;
            }
        }
    }

按住Control键时使用热键

您可以将键绑定到XAML中的命令:

<Window.InputBindings>
    <KeyBinding Key="Q" Modifiers="Control" Command="ApplicationCommands.Close"/>
</Window.InputBindings>
<Window.CommandBindings>
    <CommandBinding Command="ApplicationCommands.Close" Executed="CloseCommandHandler"/>
</Window.CommandBindings>

然后在代码后面定义该命令应该做什么:

private void CloseCommandHandler(object sender, ExecutedRoutedEventArgs e)
{
    this.Close();
}

或者将它映射到ViewModel中的命令,如果您使用MVVM模式的话。

您可以通过

private void Grid_KeyDown(object sender, KeyEventArgs e)
{
    if (e.Key == Key.Q && e.Modifiers == Keys.Control)
    {
        // do stuff
    }
}

这是在一个不同的方向,但WPF的命令可以帮助您这样做。您可以定义RoutedCommandRoutedUICommand,并将eventandler附加到CanExecuteExecuted事件。命令也可以与修改键(如CtrlShift)结合使用键绑定。当你想构建一个更大的应用程序时,这尤其有用。

下面是关于如何创建RoutedCommand的一些细节,以及关于命令

的概述

可以用ALT代替CTRL吗?如果是这样,请尝试一下-它是内置的:

WPF中的助记键