Правильный способ создания меню с ярлыками в WPF - PullRequest
3 голосов
/ 08 июня 2010

Как правильно / лучше всего создать меню с помощью горячих клавиш?

Мне просто нужно меню «Файл», например в Visual Studio, в котором есть «Создать», «Открыть», «Сохранить», «Сохранить все», «Выход» и несколько других стандартных ярлыков.

Похоже, что InputGestureText отображает соответствующий текст, но, поскольку он называется «Текст» и не вызывает события, я собираюсь предположить, что это неправильный способ сделать это. Архитектура Command также кажется довольно громоздкой, поэтому я не хочу идти по этому пути, если есть лучший способ.

Обновление: Для ясности предположим, что я использую следующее меню:

<Menu>
  <MenuItem Header="_File">
    <MenuItem Header="_New" />
    <MenuItem Header="_Open" />
    <Separator />
    <MenuItem Header="_Save" />
    <MenuItem Header="Save _All" />
    <Separator />
    <MenuItem Header="_Export"/>
    <MenuItem Header="_Import"/>
    <Separator />
    <MenuItem Header="E_xit"/>
  </MenuItem>
</Menu>

где Экспорт и Импорт будут пользовательскими ярлыками; что-то, что Microsoft не встроила в нечто вроде ApplicationCommands. Можете ли вы предоставить полное решение, включая пользовательский код C #, если это необходимо? (Это не только поможет мне, но я надеюсь помочь кому-нибудь еще, кто ищет подобные проблемы.)

Ответы [ 2 ]

13 голосов
/ 08 июня 2010

Вы правильно заметили, что InputGestureText на самом деле не устанавливает ярлык, он просто помечает его в меню. Правильный способ сделать это - использовать InputBindings окна. Вы можете сопоставить сочетание клавиш с любой командой, включая ваши собственные команды, определяемые моделью. Но для того, чтобы это работало, вам нужно использовать пункты меню, связанные с командами, а не обрабатывать их события нажатия напрямую. Это рекомендуемый способ обработки команд меню в WPF. В противном случае вам придется прибегнуть к старомодной обработке событий клавиатуры.

<Window.InputBindings>
  <KeyBinding Key="A" Modifiers="Control" Command="{Binding MyAwesomeCommand}" />
</Window.InputBindings>

Дополнительная информация на MSDN.

4 голосов
/ 08 июня 2010

Взгляните на класс ApplicationCommands . Вы получаете стандартные жесты клавиш (ускорители) и текст бесплатно.

<MenuItem Command="ApplicationCommands.Paste" Width="75" />
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...