Добавление жестов в прослушивающий элемент
Есть еще один способ добавления жестов, о котором стоит упомянуть. Ранее обсуждалось, что все пользовательские элементы 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+FKeyGesture keyGesture = new KeyGesture(Key.F, ModifierKeys.Control);KeyBinding keyBinding = new KeyBinding(ApplicationCommands.Find, keyGesture);this.InputBindings.Add(keyBinding); // Комбинированный жест Control+LeftClickMouseGesture mouseGesture = new MouseGesture(MouseAction.LeftClick, ModifierKeys.Control);MouseBinding mouseBinding = new MouseBinding(ApplicationCommands.Find, mouseGesture);this.InputBindings.Add(mouseBinding); // Клавиатурный жест Control+QInputGesture gesture = new KeyGesture(Key.Q, ModifierKeys.Control);ICommand command = ApplicationCommands.Find;keyBinding = new KeyBinding(command, (KeyGesture)gesture);this.InputBindings.Add(keyBinding); // Комбинированный жест Alt+LeftClickgesture = 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);Дата добавления: 2015-04-15; просмотров: 781;