Студопедия

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

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

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






Добавление жестов в команду






Жесты представленны абстрактным классом System.Windows.Input. InputGesture. Этот класс наследует двум типам жестов: клавиатурных и мыши, которые представлены объектами KeyGesture и MouseGesture соответственно. Команды, в свою очередь, имеют коллекцию жестов InputGestures, которую заранее можно наполнить объектами нужных жестов клавиатуры и мыши. Комбинации клавиш и кнопок мыши проще всего добавлять в объект жеста через его конструктор при создании экземпляра по схеме (Key, ModifierKeys) и (MouseAction, ModifierKeys).

В следующем примере показано, как в команду можно добавить жесты, которые будут ее запускать

// Клавиатурный жест Control+FInputGesture gesture = new KeyGesture(Key.F, ModifierKeys.Control, " Ctrl+F"); ApplicationCommands.Find.InputGestures.Add(gesture); // Комбинированный жест Control+LeftClickgesture = new MouseGesture(MouseAction.LeftClick, ModifierKeys.Control); ApplicationCommands.Find.InputGestures.Add(gesture); // Клавиатурный жест Control+QKeyGesture keyGesture = new KeyGesture(Key.Q, ModifierKeys.Control, " Ctrl+Q"); ApplicationCommands.Find.InputGestures.Add(keyGesture); // Комбинированный жест Alt+LeftClickMouseGesture mouseGesture = new MouseGesture(); mouseGesture.MouseAction = MouseAction.LeftClick; mouseGesture.Modifiers = ModifierKeys.Alt; ApplicationCommands.Find.InputGestures.Add(mouseGesture); //gesture = new MouseGesture(MouseAction.LeftClick, ModifierKeys.Alt); //ApplicationCommands.Find.InputGestures.Add(gesture);

Теперь команда Find будет запускаться щелчком на кнопке, щелчком левой кнопки мыши с нажатой клавишей Ctrl, комбинациями клавиш Ctrl+F или Ctrl+Q.

Продолжим модификацию нашего упражнения, чтобы проиллюстрировать сказанное о жестах.

  • Добавьте в обработчик события Loaded класса окна Window1 следующий код, модифицирующий жесты библиотечных команд Open и Save
public partial class Window1: Window { public Window1() { InitializeComponent(); // Регистрация обработчика this.Loaded += new RoutedEventHandler(Window1_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); } void OpenCommand_Executed(object sender, ExecutedRoutedEventArgs e) { MessageBox.Show(" Выполнена команда Open"); } void SaveCommand_Executed(object sender, ExecutedRoutedEventArgs e) { MessageBox.Show(" Выполнена команда Save"); } }

Вначале мы очистили коллекции команд от прежних жестов, затем добавили свои жесты, в том числе с участием мыши. Коллекции можно было и не очищать, тогда работали бы прежние жесты наряду с вновь добавленными.

  • Запустите приложение и убедитесь, что теперь прежние клавиатурные комбинации Ctrl+O и Ctrl+S не работают, вместо них программа реагирует на жесты клавиатуры Alt+O и Alt+S, а также выполняются комбинированные жесты с участием мыши Ctrl+LeftClick и Ctrl+RightClick

В нашей программе после добавления жестов появился существенный недостаток - сами жесты мы поменяли, но в меню все-таки остались старые маркеры команд Ctrl+O и Ctrl+S. Хоть мы и пытались в конструкторе KeyGesture() определить в последнем параметре displayString новые маркеры для жестов в меню, но все осталось по прежнему. Дело здесь в том, что объект меню создается и инициализируется в конструкторе класса по объекту уже присоединенной к источнику команды. И это происходит раньше, чем мы в коде начинаем модифицировать саму команду.

Чтобы это исправить, можно воспользоваться несколькими способами:






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