5

我已经有以下内容:

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);

这会导致我的上下文菜单显示“退出”菜单项,并带有下划线“x”。但是,按 x 没有任何作用。单击菜单项工作正常。

如何将事件与 x 键关联?请注意,这必须在我的上下文中以编程方式完成。我无法在前面的 XAML 中编写此解决方案。

4

2 回答 2

3

添加快捷方式的常用方法如下:

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 必须与一个或多个 ModifierKey 相关联。此规则的例外是功能键和数字键盘键,它们本身可以是有效的 KeyGesture。例如,您可以仅使用 F12 键创建 KeyGesture,但要在 KeyGesture 中使用 X 键,它必须与修饰键配对。

如果由于某种原因您需要使用 X w/o 修饰符 - 您将不得不处理键盘事件(例如 KeyDown)并做出相应的反应

于 2012-06-11T15:11:22.003 回答
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 处理程序将被执行。你没有看到这种情况发生吗?

于 2012-07-30T19:23:31.747 回答