我正在尝试将一些热键添加到我的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;
}
}
}
答案 0 :(得分:1)
您可以通过
完成此操作private void Grid_KeyDown(object sender, KeyEventArgs e)
{
if (e.Key == Key.Q && e.Modifiers == Keys.Control)
{
// do stuff
}
}
答案 1 :(得分:1)
现在这是一个不同的方向,但WPF也有可以帮助你的命令。您可以定义RoutedCommand
或RoutedUICommand
,并将EventHandlers附加到CanExecute
和Executed
事件。命令还可以将KeyBinding与Ctrl
或Shift
等修改键结合使用。当您想要构建更大的应用程序时,这尤其有用。
答案 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吗?是这样,尝试一下 - 它内置于: