C#持有Control的热键

时间:2014-03-21 17:46:28

标签: c# xaml

我正在尝试将一些热键添加到我的Window应用程序中,这样如果我按下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;
            }
        }
    }

4 个答案:

答案 0 :(得分:1)

您可以通过

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

答案 1 :(得分:1)

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

以下是How to: Create a RoutedCommandoverview about commands

的一些详细信息

答案 2 :(得分:1)

您可以将键绑定到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();
}

如果您正在使用MVVM模式,请将其映射到ViewModel中的命令。

答案 3 :(得分:0)

您可以使用ALT代替CTRL吗?是这样,尝试一下 - 它内置于:

Mnemonic Keys in WPF