- •Лабораторная работа: События и команды в wpf
- •Обзор библиотечных событий
- •Упражнение 1. Обработка событий клавиатуры
- •События мыши
- •Упражнение 2. Прослушивание событий мыши
- •Упражнение 3. Создание и прослушивание пользовательского события
- •Обработчики уровня класса
- •Добавление информации в объект аргумента события
- •Задание для Упражнения 3
- •Модель команд
- •Объекты команд
- •Библиотечные классы команд
- •Присоединение команды к источнику
- •Привязка команды к прослушивающему элементу
- •Упражнение 4. Привязка команд в разметке
- •Перекрытие функций диспетчеризации событий
- •Прямой вызов команд
- •Упражнение 5. Привязка команд в процедурном коде
- •Жесты как источники команд
- •Добавление жестов в команду
- •Способ 1
- •Способ 2
- •Способ 3
- •Добавление жестов в прослушивающий элемент
- •Упражнение 6. Разработка простого блокнота без механизма команд
- •Создание главного меню
- •Добавление иконок
- •Создание логических ресурсов
- •Создание панели инструментов, строки состояния и рабочей области
- •Замена встроенного контекстного меню
- •Назначение ресурсов неразделяемыми
- •Замена иконок на прозрачные
- •Отключение встроенных команд
- •Подключение иконки приложения
- •Распределение класса по нескольким файлам и создание вспомогательных функций
- •Размещение вариантов заголовков окна в ресурсах приложения
- •Создание заготовок обработчиков
- •Регистрация обработчиков в разметке
- •Реализация обработчиков раздела меню File
- •Обработка системной кнопки
- •Реализация части обработчиков раздела меню Edit
- •Разработка и кодирование диалогового окна Find and Replace
- •Кодирование функциональности Find and Replace в основном окне
- •Подключение функциональности Find and Replace к источникам задач
- •Разработка диалогового окна Go To
- •Применение вложенных ресурсов
- •Подключение функциональности Go To к основному окну
- •Прочие задачи
- •Принудительная перерисовка окна
- •Добавление жестов
- •Логика отключения источников задач
- •Реализация логики отключения источников задачи Save
- •Упражнение 7. Разработка простого блокнота с использованием механизма команд
- •Создание нового проекта из копии существующего
- •Краткий анализ задачи
- •Создание и привязка команд
- •Реализация логики доступности источников команд
- •Отображение позиции курсора в строке состояния
Способ 1
Определитете в разметке в элементах меню свойство InputGestureText следующим образом
<Menu>
<MenuItem Header="_File">
<MenuItem Command="ApplicationCommands.Open"
InputGestureText="Alt+O" />
<MenuItem Command="ApplicationCommands.Save"
InputGestureText="Alt+S" />
</MenuItem>
</Menu>
Запустите приложение и убедитесь, что теперь маркеры команд меню изменились
Способ 2
Вместо разметки изменить свойство InputGestureText можно в процедурном коде, но для этого элементам меню нужно присвоить имена.
Удалите в разметке из дескрипторов элементов меню параметры Command и InputGestureText, а добавьте вместо них имена элементов, как показано ниже
<Menu>
<MenuItem Header="_File">
<MenuItem Name="openMenu" />
<MenuItem Name="saveMenu" />
</MenuItem>
</Menu>
Добавьте в самый конец обработчика события Loaded после кода добавления жестов следующую пару строк динамического присоединения модифицированных команд к меню-источнику
void Window1_Loaded(object sender, RoutedEventArgs e)
{
// Привязка команд в коде
CommandBinding binding = new CommandBinding();
binding.Command = ApplicationCommands.Open;
binding.Executed +=
new ExecutedRoutedEventHandler(OpenCommand_Executed);
this.CommandBindings.Add(binding);
binding = new CommandBinding();
binding.Command = ApplicationCommands.Save;
binding.Executed +=
new ExecutedRoutedEventHandler(SaveCommand_Executed);
this.CommandBindings.Add(binding);
// Очистка коллекций прежних жестов команд
ApplicationCommands.Open.InputGestures.Clear();
ApplicationCommands.Save.InputGestures.Clear();
// Добавление новых жестов клавиатуры Alt+O и Alt+S
InputGesture key = new KeyGesture(Key.O, ModifierKeys.Alt, "Alt+O");
ApplicationCommands.Open.InputGestures.Add(key);
//
KeyGesture keyGesture = new KeyGesture(Key.S, ModifierKeys.Alt, "Alt+S");
ApplicationCommands.Save.InputGestures.Add(keyGesture);
// Добавление новых жестов мыши Ctrl+LeftClick и Ctrl+RightClick
InputGesture mouse = new MouseGesture(MouseAction.LeftClick, ModifierKeys.Control);
ApplicationCommands.Open.InputGestures.Add(mouse);
//
MouseGesture mouseGesture = new MouseGesture();
mouseGesture.MouseAction = MouseAction.RightClick;
mouseGesture.Modifiers = ModifierKeys.Control;
ApplicationCommands.Save.InputGestures.Add(mouseGesture);
// Присоединяем модифицированные команды к меню-источнику
openMenu.Command = ApplicationCommands.Open;
saveMenu.Command = ApplicationCommands.Save;
}
Запустите приложение и убедитесь, что теперь маркеры команд меню изменились в соответствии с введенными нами при формировании новых жестов
