Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
WPF-практика 5 События и команды.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
2.21 Mб
Скачать

Способ 3

  • Разметку меню сделайте такой

<Menu>

<MenuItem Header="_File">

<MenuItem Name="openMenu"

Command="ApplicationCommands.Open" />

<MenuItem Name="saveMenu"

Command="ApplicationCommands.Save" />

</MenuItem>

</Menu>

  • Замените в обработчике Window1_Loaded () только что добавленный код на новый

// Присоединяем модифицированные команды к меню-источнику

//openMenu.Command = ApplicationCommands.Open;

//saveMenu.Command = ApplicationCommands.Save;

openMenu.InputGestureText = "Alt+O";

saveMenu.InputGestureText = "Alt+S";

  • Запустите приложение и убедитесь, что маркеры команд меню стали правильными

Добавление жестов в прослушивающий элемент

Есть еще один способ добавления жестов, о котором стоит упомянуть. Ранее обсуждалось, что все пользовательские элементы WPF наследуют от UIElement или ContentElement, а эти классы, в свою очередь, имеют в качестве свойства коллекцию InputBindings типа InputBindingCollection. Коллекция может быть заполнена классами KeyBinding или MouseBinding, каждый из которых связывает жест клавиатуры (представленный объектом KeyGesture ) или мыши (представленный объектом MouseGesture ) с командой. Оба класса наследуют тип InputBinding.

Например, привязать жесты с командой к объекту окна можно одним из следующих способов

<Window x:Class="Tmp.window"

xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"

xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

Height="300" Width="300">

<Window.InputBindings>

<KeyBinding Key="F"

Modifiers="Control"

Command="ApplicationCommands.Find" />

<MouseBinding MouseAction="Control+LeftClick"

Command="ApplicationCommands.Find" />

<KeyBinding Key="Q"

Modifiers="Control"

Command="ApplicationCommands.Find" />

<MouseBinding Gesture="Alt+LeftClick"

Command="ApplicationCommands.Find" />

</Window.InputBindings>

<Grid>

<Button Command="ApplicationCommands.Find"

Height="23"

Width="75"

>

Поиск

</Button>

</Grid>

</Window>

В классе MouseBinding свойство Modifiers доступно только для чтения, поэтому жест для мыши нужно вводить в свойство MouseAction сразу целиком, как показано в только что приведенном примере.

// Клавиатурный жест Control+F

KeyGesture keyGesture = new KeyGesture(Key.F, ModifierKeys.Control);

KeyBinding keyBinding = new KeyBinding(ApplicationCommands.Find, keyGesture);

this.InputBindings.Add(keyBinding);

// Комбинированный жест Control+LeftClick

MouseGesture mouseGesture = new MouseGesture(MouseAction.LeftClick, ModifierKeys.Control);

MouseBinding mouseBinding = new MouseBinding(ApplicationCommands.Find, mouseGesture);

this.InputBindings.Add(mouseBinding);

// Клавиатурный жест Control+Q

InputGesture gesture = new KeyGesture(Key.Q, ModifierKeys.Control);

ICommand command = ApplicationCommands.Find;

keyBinding = new KeyBinding(command, (KeyGesture)gesture);

this.InputBindings.Add(keyBinding);

// Комбинированный жест Alt+LeftClick

gesture = new MouseGesture();

((MouseGesture)gesture).MouseAction = MouseAction.LeftClick;

((MouseGesture)gesture).Modifiers = ModifierKeys.Alt;

mouseBinding = new MouseBinding();

mouseBinding.Command = command;

mouseBinding.Gesture = gesture;

this.InputBindings.Add(mouseBinding);