Windows Presentation Foundation System Object Dispatcher Object Application
Классы Windows Presentation Foundation System. Object Dispatcher. Object Application Dependency. Object Navigation. Service Framework. Template Visual Content. Element UIElement Framework. Content. Element Style Framework. Element Page Shape Text. Block Content. Control Range. Base Text. Box. Base Frame Slider Text. Box Window Progress. Bar Rich. Text. Box Grid Items. Control Menu Context. Menu Headered. Items. Control Menu. Item Button Toolbar Tree. View. Item Selector Repeat. Button Tab. Control Toggle. Button Check. Box Canvas Menu. Base Navigation. Window Button. Base Panel Tool. Bar. Tray Control Radio. Button List. Box List. View Tree. View Combo. Box
Классы Routed. Command и Routed. UICommand ü Классы определяют команду, маршрутизируемую по дереву элементов. Класс Routed. UICommand отличается от своего базового класса Routed. Command только наличием свойства Text. ü Методы Execute и Can. Execute класса Routed. Command не содержат логику приложения для команды. Методы только инициируют события: • метод Execute инициирует события Preview. Executed и Executed; • метод Can. Execute инициирует события Preview. Can. Execute и Can. Execute. public Routed. Command (); public Routed. Command ( string name, Type owner. Type, Input. Gesture. Collection input. Gestures ); System. Object Routed. Command: ICommand Routed. UICommand public bool Can. Execute ( Object parameter, IInput. Element target ); public void Execute ( Object parameter, IInput. Element target ); public Input. Gesture. Collection Input. Gestures { get; } public string Name { get; } public Type Owner. Type { get; } public event Event. Handler Can. Execute. Changed; public Routed. UICommand (); public Routed. UICommand ( string text, string name, Type owner. Type, Input. Gesture. Collection input. Gestures ) ; public string Text { get; set; } ü Логика команды находится в обработчиках событий, присоединенных к команде с помощью объектов Command. Binding.
Класс Command. Binding ü Класс реализует привязку команды Routed. Command к обработчикам, в которых реализована логика команды. ü В классе Command. Binding определены четыре события public event Can. Execute. Routed. Event. Handler Can. Execute; Executed. Routed. Event. Handler Executed; Can. Execute. Routed. Event. Handler Preview. Can. Execute; Executed. Routed. Event. Handler Preview. Executed; ü Конструкторы класса связывают команду с обработчиками событий Preview. Executed, Preview. Can. Execute, Can. Execute public Command. Binding( ICommand command, Executed. Routed. Event. Handler executed ); public Command. Binding( ICommand command, Executed. Routed. Event. Handler executed, Can. Execute. Routed. Event. Handler can. Execute );
Коллекция Command. Bindings в классе UIElement ü Класс UIElement поддерживает коллекцию объектов Command. Binding: public Command. Binding. Collection Command. Bindings { get; } ü Коллекция Command. Binding. Collection реализует интерфейс IList и содержит методы для работы с коллекцией, в частности, public int Add( Command. Binding command. Binding ); public void Remove( Command. Binding command. Binding ); ü В примере два объекта Command. Binding добавляются к коллекции команд главного окна приложения в XAML. <Window. Command. Bindings> <Command. Binding Command="Application. Commands. Open" Executed="Open. Command. Handler" Can. Execute="Can. Open. Execute. Handler"/> <Command. Binding Command="Application. Commands. Copy" Executed="Copy. Command. Handler" /> </Window. Command. Bindings>
Executed. Routed. Event. Args и Can. Execute. Routed. Event. Args ü Классы предоставляют данные для маршрутизируемых событий Executed и Preview. Executed. System. Object public Routed. Event { get; set; } System. Event. Args public Object Source { get; set; } System. Windows. Routed. Event. Args System. Windows. Input. Executed. Routed. Event. Args public bool Handled { get; set; } public Object Original. Source { get; } System. Windows. Input. Can. Execute. Routed. Event. Args public ICommand { get; } public bool Can. Execute { get; set; } public Object Parameter { get; } public ICommand { get; } public bool Continue. Routing { get; set; } public Object Parameter { get; }
Класс Сommand. Manager ü Класс Command. Manager управляет моделью команд WPF и содержит • методы для регистрации объектов Command. Binding и Input. Binding; • методы для добавления и удаления обработчиков событий; • сервисы для запроса состояния команды. ü Класс содержит метод для регистрации команды для класса (а не для экземпляра класса): public static void Register. Class. Command. Binding( Type type, Command. Binding command. Binding ); ü Класс содержит методы, которые можно использовать для добавления к элементу управления обработчиков, связанных с командой: public static void Add. Executed. Handler ( UIElement element, Executed. Routed. Event. Handler handler); public static void Remove. Executed. Handler ( UIElement element, Executed. Routed. Event. Handler handler ); public static void Add. Preview. Executed. Handler ( UIElement element, Executed. Routed. Event. Handler handler ); public static void Remove. Preview. Executed. Handler ( UIElement element, Executed. Routed. Event. Handler handler );
Команды из статических классов WPF ü Библиотека WPF содержит более 100 предопределенных команд, которые находятся в 5 статических класcах: • Application. Commands • Navigation. Commands (Browse. Forward, Browse. Back, Zoom , Search, …) • Media. Commands (Play, Pause, Record, Stop, …) • Editing. Commands (Align. Center, Delete. Next. Word, Move. To. Line. End, …) • Component. Commands ( Move. Down, Move. Focus. Up, Select. To. End, …) ü Все предопределенные команды доступны как статические свойства классов и имеют сигнатуру public static Routed. UICommand. Name { get; } ü Cтатический класc Application. Commands содержит статические свойства (команды): Cancel. Print Delete Paste Save Close Find Print Save. As Context. Menu Help Print. Preview Select. All Copy New Properties Stop Correction. List Not. ACommand Redo Undo Cut Open Replace
Класс Mouse. Gesture ü Определяет жест ввода мыши, который может использоваться для вызова команды. ü Конструкторы и свойства класса Mouse. Gesture() ; Mouse. Gesture(Mouse. Action); Mouse. Gesture(Mouse. Action, Modifier. Keys); Mouse. Action{get; set; } Modifiers{get; set; } ü Перечисление Modifier. Keys задает набор клавиш CTRL, SHIFT и ALT. Имеет значения None, Alt, Control, Shift и Windows. ü Перечисление Mouse. Action имеет значения None, Left. Click, Right. Click, Middle. Click, Wheel. Click, Left. Double. Click, Right. Double. Click и Middle. Double. Click. ü Допустимый объект Key. Gesture может не содержать значений перечисления Modifier. Keys.
Класс Key. Binding. Пример привязки в коде ü В следующем примере в коде создается объект Key. Binding , который связывает команду Open с жестом Alt+O. Привязка добавляется в коллекцию Input. Bindings главного окна приложения. private void button_add_gestures_Click(object sender, Routed. Event. Args e) { Key. Binding Open. Key. Binding = new Key. Binding( Application. Commands. Open, Key. O, Modifier. Keys. Alt); this. Input. Bindings. Add(Open. Key. Binding); } ü Перечисление Modifier. Keys задает набор клавиш CTRL, SHIFT и ALT. Имеет значения None, Alt, Control, Shift и Windows. ü Перечисление Key задает клавиши клавиатуры.
Класс Mouse. Binding ü Объект Mouse. Binding связывает жест Mouse. Gesture с командой. ü Класс Mouse. Binding содержит свойства Mouse. Action и Gesture, которые можно использовать для определения жеста для команды ü Свойства Gesture и Mouse. Action представляют один и тот же объект, поэтому в XAML для задания жеста в Mouse. Binding можно использовать один из атрибутов - Gesture или Mouse. Action. ü Перечисление Mouse. Action имеет значения None, Left. Click, Right. Click, Middle. Click, Wheel. Click, Left. Double. Click, Right. Double. Click и Middle. Double. Click. ü В XAML атрибут Gesture элемента Mouse. Binding можно задать в виде одной строки, например: "CTRL+Left. Click". ü В примере в коллекцию Input. Bindings привязок ввода окна добавлены привязки к команде Open <Window. Input. Bindings> <Key. Binding Command="Application. Commands. Open" Gesture="CTRL+O" /> <Key. Binding Command="Application. Commands. Open" Gesture="F 8"/> <Mouse. Binding Gesture=“Ctrl+Wheel. Click" Command="Application. Commands. Open" /> </Window. Input. Bindings>
- Slides: 18