0

我尝试DelegateCommand了方法,它执行正确,但我的关键手势不起作用:

public DelegateCommand StageCommand { get; private set; }

...
StageCommand = new DelegateCommand(StageExecuted);
...

private void StageExecuted(object action)
{
    System.Console.WriteLine("yay!");
}

和我的上下文菜单的 XAML:

        <ContextMenu.InputBindings>
            <KeyBinding Command="{Binding PlacementTarget.Tag.StageCommand, RelativeSource={RelativeSource AncestorType=ContextMenu}}"
                        Gesture="Enter" />
        </ContextMenu.InputBindings>

        <MenuItem Header="Stage" Command="{Binding PlacementTarget.Tag.StageCommand, RelativeSource={RelativeSource AncestorType=ContextMenu}}">
        </MenuItem>

所有这一切都正确执行,但我错过了关键手势,它甚至没有显示它:

在此处输入图像描述

这就是我使用上下文菜单的方式:

<DataGrid 
          ContextMenu="{DynamicResource TestContextMenu}"
          Tag="{Binding}">

更新:

Enter 如果我在上下文菜单打开时按下,它将执行。只要附加了上下文菜单的控件具有焦点,我怎样才能使它执行?而且,它仍然不显示手势键。

4

2 回答 2

2

CommandBinding为某些控件中的命令创建一个InputBindings.

于 2012-05-01T17:21:59.810 回答
1

来自MSDNMenuItem.InputGestureText:_

此属性不将输入手势与菜单项关联;它只是将文本添加到菜单项。应用程序必须处理用户的输入以执行操作。

基本上,因为这纯粹是一个文本字段,用于在默认控制模板中向用户显示输入手势,MenuItem所以它与您决定使用KeyBinding.

您可以通过绑定或 aStaticResource或通过附加属性/行为来处理此问题,该属性/行为搜索KeyBindings 并将输入手势分配给使用匹配命令的任何子项。

于 2012-05-01T17:39:07.567 回答