2011-11-22 93 views
1

我是tryiong来添加快捷方式到我的菜单项目,但它不接缝工作。我的快捷方式不起作用

这里是我的菜单项:

<MenuItem Name="openMenuItem" Header="Open file" InputGestureText="Ctrl+O" Command="{Binding OpenFile}"></MenuItem> 

什么我错在这里做什么?

这里是我的菜单的画面:

enter image description here

+0

当你说“它似乎不工作”,这是否意味着你会得到一个错误信息,一个例外,在VS的消息输出窗口什么都没有? – madd0

+0

不,这意味着当我按下ctrl + o时没有任何事情发生,但是当我用鼠标点击时,菜单正常工作。 – Sulby

+0

这可能有助于http://stackoverflow.com/questions/5329292/why-doesnt-setting-menuitem-inputgesturetext-cause-the-menuitem-to-activate-whe – V4Vendetta

回答

3

在回答这个问题,你专门问:

我在做什么错在这里?

我带你到documentation for the InputGestureText property

此属性不与菜单项输入手势关联;它只是添加文本到菜单项。

它表现为设计的。 InputGestureText只是在菜单项上显示一些文字;它不会改变行为,特别是,它实际上并不会听取关键手势。这有些出乎意料,因为WinForms 中的相应属性的确添加了行为,但它也被属性名称上的Text后缀调出 - 它不是输入手势,它只是显示给的文本告诉用户关于输入手势。当你使用RoutedUICommand时它会自动设置,但是当你自己实现ICommand时,你可以设置InputGestureText并监听关键手势。

你做错了什么是期待这个属性直观的行为。你不是唯一一个被这个困惑的人。 (明显的后续问题是“如何为我的MVVM命令添加键盘快捷键”,但这是一个单独的问题 - 并且多次在StackOverflow上询问和回答;一旦知道这是正确的问题是问,你应该能够搜索现有的答案。)

2

据尼克在:http://social.msdn.microsoft.com/Forums/en-US/wpf/thread/d5536d93-b570-4e21-8668-641fa519cd95/你需要添加代码,使其快捷响应,就像这样:

public Window1() 
{ 
    FilterCommand.InputGestures.Add(new KeyGesture(Key.O, ModifierKeys.Control)); 
    InitializeComponent(); 
} 
+1

那么在例如大公正在使用的RoutedCommand但我绑定到ICommand。那我会怎么做? – Sulby

+0

有没有办法将输入手势添加到'ICommand',例如所谓的'RelayCommand'或'DelegateCommand'? – JobaDiniz

1

有关于打开和关闭以及其他常用命令的预定义命令。看一看:ApplicationCommands

你会碰到这样的:

<Menu DockPanel.Dock="Top"> 
    <MenuItem Command="ApplicationCommands.Paste" Width="75" /> 
    </Menu>