Моя комбинация клавиш не работает

Я пытаюсь добавить ярлык в свой пункт меню, но он не работает.

вот мой пункт меню:

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

Что я здесь делаю неправильно?

вот фото моего меню:

введите здесь описание изображения


person 7heViking    schedule 22.11.2011    source источник
comment
Когда вы говорите, что это не работает, означает ли это, что вы получаете сообщение об ошибке, исключение, сообщение в окне вывода VS, ничего?   -  person madd0    schedule 22.11.2011
comment
Нет. Это означает, что ничего не происходит, когда я нажимаю ctrl + o, но меню работает, когда я щелкаю мышью.   -  person 7heViking    schedule 22.11.2011
comment
Это может помочь: вызвать активацию элемента меню, когда "> stackoverflow.com/questions/5329292/   -  person V4Vendetta    schedule 22.11.2011


Ответы (3)


В ответ на вопрос, который вы конкретно задали:

Что я здесь делаю неправильно?

Я направляю вас к документации по свойству InputGestureText< /а>:

Это свойство не связывает жест ввода с пунктом меню; он просто добавляет текст к пункту меню.

Он ведет себя так, как задумано. InputGestureText просто отображает текст в пункте меню; он не меняет поведение и, в частности, фактически не прислушивается к этому ключевому жесту. Это несколько неожиданно, учитывая, что соответствующее свойство в WinForms действительно добавляет поведение, но оно также вызывается суффиксом Text в имени свойства — это не жест ввода, а просто отображаемый текст. чтобы сообщить пользователю о жесте ввода. Он устанавливается автоматически, когда вы используете RoutedUICommand, но когда вы реализуете ICommand самостоятельно, вам решать, как установить InputGestureText, так и прослушивать жест клавиши.

Что вы делаете неправильно, так это ожидаете, что это свойство будет вести себя интуитивно. Ты далеко не единственный, кого это смущает.

(Очевидный последующий вопрос: «Как мне добавить сочетание клавиш для моей команды MVVM», но это отдельный вопрос, который неоднократно задавали и на него отвечали в StackOverflow; как только вы узнаете, что это правильный вопрос, спрашивая, вы должны иметь возможность искать существующие ответы.)

person Joe White    schedule 22.11.2011

Согласно Нику по адресу: 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();
}
person Björn    schedule 22.11.2011
comment
Что ж, в этом примере используется RoutedCommand, но я привязываюсь к ICommand. Что я буду делать тогда? - person 7heViking; 22.11.2011
comment
Есть ли способ добавить жесты ввода к ICommand, например, так называемые RelayCommand или DelegateCommand? - person JobaDiniz; 21.12.2016

Существуют предопределенные команды для открытия и закрытия, а также другие распространенные команды. Взгляните на: ApplicationCommands

У вас будет что-то вроде:

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