Студопедия

Главная страница Случайная страница

Разделы сайта

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






Добавление жестов






Когда мы создавали источники - элементы меню, то бодро прописали вместе с названиями задач и жесты клавиатурного ввода. Но ни один из них в настоящий момент не работает, поскольку не подкреплен соответствующим механизмом. Далее мы этот же пример повторим с применением команд, а там, мы говорили, эта функциональность уже встроена. Но на данном этапе нам такую возможность придется реализовывать вручную, и мы это сейчас выполним - для тренировки!

  • Добавьте к узлу текущего проекта пустой файл KeyGestures.cs


увеличить изображение

>

  • Заполните файл KeyGestures.cs следующим кодом
using System; using System.Windows; using System.Windows.Input; using System.Collections.Generic; // Для Dictionary< TKey, TValue> namespace Notepad1{ partial class Window1 { // Еще один вариант в Петцольд, WPF, с.316!!! // Определяем ассоциативный словарь Dictionary< KeyGesture, RoutedEventHandler> gests = new Dictionary< KeyGesture, RoutedEventHandler> (); void CreateGestures() { // File gests.Add(new KeyGesture(Key.N, ModifierKeys.Control), NewOnExecute); //_New gests.Add(new KeyGesture(Key.O, ModifierKeys.Control), OpenOnExecute); //_Open... gests.Add(new KeyGesture(Key.S, ModifierKeys.Control), SaveOnExecute); //_Save gests.Add(new KeyGesture(Key.F2, ModifierKeys.Control), PrintPreviewOnExecute); //P_rint Preview gests.Add(new KeyGesture(Key.P, ModifierKeys.Control), PrintOnExecute); //_Print... // Edit gests.Add(new KeyGesture(Key.Z, ModifierKeys.Control), UndoOnExecute); //_Undo gests.Add(new KeyGesture(Key.Y, ModifierKeys.Control), RedoOnExecute); //_Redo gests.Add(new KeyGesture(Key.X, ModifierKeys.Control), CutOnExecute); //Cu_t gests.Add(new KeyGesture(Key.C, ModifierKeys.Control), CopyOnExecute); //_Copy gests.Add(new KeyGesture(Key.V, ModifierKeys.Control), PasteOnExecute); //_Paste gests.Add(new KeyGesture(Key.Delete, ModifierKeys.None), DeleteOnExecute); //De_lete gests.Add(new KeyGesture(Key.F, ModifierKeys.Control), FindOnExecute); //_Find... gests.Add(new KeyGesture(Key.F3, ModifierKeys.None), FindNextOnExecute); //Find _Next gests.Add(new KeyGesture(Key.H, ModifierKeys.Control), ReplaceOnExecute); //_Replace... gests.Add(new KeyGesture(Key.G, ModifierKeys.Control), GoToOnExecute); //_Go To... gests.Add(new KeyGesture(Key.A, ModifierKeys.Control), SelectAllOnExecute); //Select _All // Format gests.Add(new KeyGesture(Key.W, ModifierKeys.Control), WordWrapOnExecute); //_Word Wrap } // Перекрываем стандартный обработчик protected override void OnPreviewKeyDown(KeyEventArgs e) { base.OnPreviewKeyDown(e); // Ищем жест, останавливаем событие и исполняем обработчик foreach (KeyGesture gest in gests.Keys) if (gest.Matches(null, e)) // Сравниваем перехваченный жест с заданным в объекте { gests[gest](this, e); // Вызываем обработчик через словарь e.Handled = true; // Останавливаем событие break; // Прерываем цикл } } }}
  • Добавьте в конструктор класса Window1 файла Window1.xaml.cs вызов нашей функции создания жестов
public Window1() { InitializeComponent(); // Создание жестов this.CreateGestures(); }
  • Запустите приложение и убедитесь, что клавиатурные жесты работают





© 2023 :: MyLektsii.ru :: Мои Лекции
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
Копирование текстов разрешено только с указанием индексируемой ссылки на источник.