让两个关键手势和执行方法在WPF中工作

时间:2012-05-01 17:18:15

标签: c# wpf

我尝试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>

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

enter image description here

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

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

更新

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

2 个答案:

答案 0 :(得分:2)

在某些控件的CommandBinding中为该命令创建InputBindings

答案 1 :(得分:1)

来自MenuItem.InputGestureText的{​​{1}}:

  

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

基本上,因为这纯粹是一个文本字段,用于在默认的MenuItem控制模板中向用户显示输入手势,所以它与某些命令之间没有关联,您决定使用{{ 1}}。

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