我已经拥有以下内容:
var myContextMenu = new System.Windows.Controls.ContextMenu();
var exitItem = new MenuItem();
exitItem.Header = "E_xit";
exitItem.Item.Click += new RoutedEventHandler(new System.EventHandler(ExitProgram));
myContextMenu.Items.Add(exitItem);
这会导致我的上下文菜单显示Exit菜单项,带有带下划线的“x”。但是,按x不会做任何事情。单击菜单项可以正常工作。
如何将事件与x键相关联?请注意,这必须在我的上下文中以编程方式完成。我不能在前面的XAML中编写这个解决方案。
答案 0 :(得分:2)
添加快捷方式的常用方法如下:
var exitCommand = new RelayCommand(_ => ExitProgram());
var exitItem = new MenuItem();
exitItem.Header = "E_xit";
exitItem.Command = exitCommand;
myContextMenu.Items.Add(exitItem);
InputBindings.Add(new KeyBinding(exitCommand, new KeyGesture(Key.X, ModifierKeys.Alt));
RelayCommand 这里使用的类不是WPF的一部分,但它广泛用于基于MVVM的应用程序。
但请注意,您无法在没有修改器的情况下将快捷方式设置为X. 引自MSDN
在大多数情况下,KeyGesture必须与一个或多个相关联 ModifierKeys。此规则的例外是功能键和 数字小键盘键,可以是有效的KeyGesture 他们自己。例如,您可以仅使用。创建KeyGesture F12键,但要在KeyGesture中使用X键,它必须与a配对 修饰键。
如果由于某种原因你需要使用X w / o修饰符 - 你必须处理键盘事件(例如KeyDown)并做出相应的反应
答案 1 :(得分:0)
这对我来说很好用:
using System.Windows;
using System.Windows.Controls;
namespace WpfApplication5
{
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
Loaded += new RoutedEventHandler(MainWindow_Loaded);
}
private void MainWindow_Loaded(object sender, RoutedEventArgs e)
{
// Create menu item.
MenuItem exitMenuItem = new MenuItem();
exitMenuItem.Header = "E_xit";
exitMenuItem.Click +=new RoutedEventHandler(exitMenuItem_Click);
// Create contextual menu.
ContextMenu contextMenu = new ContextMenu();
contextMenu.Items.Add(exitMenuItem);
// Attach context-menu to something.
myButton.ContextMenu = contextMenu; // Assuming there's a button on window named "myButton".
}
public void exitMenuItem_Click(object sender, RoutedEventArgs e)
{
// This gets executed when user right-clicks button, and presses x down on their keyboard.
// TODO: Exit logic.
}
}
}
<Window x:Class="WpfApplication5.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow">
<Grid>
<Button x:Name="myButton" />
</Grid>
</Window>
当用户右键单击按钮并按下键盘上的“x”时,将执行exitMenuItem_Click处理程序。你没有看到这种情况发生吗?