我尝试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
,则打开上下文菜单,然后执行。只要附加了上下文菜单的控件具有焦点,我该如何才能执行它?而且,它仍然不显示手势键。
答案 0 :(得分:2)
在某些控件的CommandBinding
中为该命令创建InputBindings
。
答案 1 :(得分:1)
来自MenuItem.InputGestureText
的{{1}}:
此属性不会将输入手势与菜单项相关联;它只是将文本添加到菜单项。应用程序必须处理用户的输入以执行操作。
基本上,因为这纯粹是一个文本字段,用于在默认的MenuItem
控制模板中向用户显示输入手势,所以它与某些命令之间没有关联,您决定使用{{ 1}}。
您可以通过绑定或KeyBinding
处理此问题,也可以通过附加属性/行为来搜索StaticResource
并将输入手势分配给使用匹配命令的任何子项。< / p>