Библиотека команд
35WPF --- Привязка, команды и стили WPF --- Библиотека команд
Разработчики WPF учли тот факт, что в каждом приложении может использоваться огромное количество команд, а многие команды могут быть общими для множества приложений. Например, во всех приложениях, предназначенных для обработки документов, будут присутствовать собственные версии команд New (Создать), Open (Открыть) и Save (Сохранить). Поэтому для снижения затрат по созданию таких команд в состав WPF была включена библиотека базовых команд, в которой содержится свыше 100 команд. Все эти команды доступны через статические свойства пяти отдельных статических классов:
- ApplicationCommands
Предоставляет общие команды, в том числе команды буфера обмена (такие как Сору (Копировать), Cut (Вырезать) и Paste (Вставить)) и команды обработки документов (вроде New (Создать), Open (Открыть), Save (Сохранить), SaveAs (Сохранить как), Print (Печать) и т.д.).
- NavigationCommands
Предоставляет команды, применяемые для навигации, включая те, что предназначены специально для страничных приложений (наподобие BrowseBack (Назад), BrowseForward (Вперед) и NextPage (Переход)), а также команды для приложений, ориентированных на работу с документами (такие как IncreaseZoom (Масштаб) и Refresh (Обновить)).
- EditingCommands
Предоставляет длинный список команд, предназначенных в основном для редактирования документов, в том числе команды перемещения (вроде MoveToLineEnd (Переход в конец строки), MoveLeftByWord (Переход влево на одно слово), MoveUpByPage (Переход на одну страницу вверх) и т.д.), выделения содержимого (такие как SelectToLineEnd (Выделение до конца строки), SelectLeftByWord (Выделение слова слева)) и изменения форматирования (наподобие ToggleBold (Выделение полужирным) и ToggleUnderline (Выделение подчеркиванием))
- ComponentCommands
Предоставляет команды, которые применяются компонентами пользовательского интерфейса, включая команды перемещения и выделения содержимого, подобные (и даже дублирующие) некоторым командам в классе EditingCommands.
- MediaCommands
Предоставляет набор команд для работы с мультимедиа (такие как Play (Воспроизвести), Pause (Пауза), NextTrack (Переход к следующей композиции) и IncreaseVolume (Увеличение громкости)).
Класс ApplicationCommands предлагает набор базовых команд, которые часто применяются в приложениях всех типов, поэтому с ними стоит вкратце ознакомиться:
Например, ApplicationCommands.Open является статическим свойством, которое предоставляет объект RoutedUICommand. Этот объект представляет в приложении команду Open (Открыть). Поскольку ApplicationCommands.Open является статическим свойством, во всем приложении может существовать всего лишь один экземпляр команды Open. Однако применяться он может по-разному, в зависимости от его источника, т.е. места, где он встречается в пользовательском интерфейсе.
Свойство RoutedUICommand.Text отображает имя каждой команды, добавляя, где нужно, пробелы между словами. Например, для команды ApplicationCommands.SelectAll оно отображает текст Select All (Выделить все). (Свойство Name содержит тот же самый текст, но без пробелов.) Свойство RoutedUICommand.OwnerType возвращает тип объекта для класса ApplicationCommands, поскольку команда Open является статическим свойством этого класса.
Свойство Text команды можно изменять перед его привязкой к окну (например, с использованием кода в конструкторе окна или класса приложения). Поскольку команды представляют собой статические объекты, являющиеся глобальными для всего приложения, изменение текста-команды влияет на нее везде, где она встречается в пользовательском интерфейсе. В отличие от свойства Text, свойство Name модифицировать нельзя.
Как уже упоминалось, эти отдельные объекты команд являются всего лишь маркерами, не имеющими реальной функциональности. Однако многие из них обладают одним дополнительным средством: привязками ввода по умолчанию. Например, команда ApplicationCommands.Open отображается на комбинацию клавиш Ctrl+O. После привязки этой клавиатурной комбинации к команде и ее добавления в окно в виде источника данной команды она становится активной, даже если команда не отображается нигде в пользовательском интерфейсе.