Построение меню

95

В целях дальнейшей демонстрации возможностей триггеров событии нам потребуется расширить рассматриваемый ранее пример проекта, чтобы создать простую систему меню для управления анимационной последовательностью по раскадровке. Прежде всего удалите полностью текущий триггер события Button.Click. Затем выберите объект раскадровки SpinButtonAnimation на панели Objects and Timehne и установите значение Forever в свойстве RepeatBehavior этого объекта на панели Properties.

Далее воспользуйтесь панелью Assets, чтобы найти элемент управления типа Menu и дважды щелкните на нем, чтобы добавить его экземпляр на монтажном столе. Присвойте этому элементу управления имя mainMenuSystem. На панели Properties измените мышью размеры этого экземпляра объекта типа Menu таким образом, чтобы расположить его по всей ширине окна. Щелкните правой кнопкой мыши на данном элементе управления типа Menu непосредственно на монтажном столе и выберите команду Add MenuItem (Добавить пункт меню) из всплывающего контекстного меню:

Добавление пункта в меню

Выберите новый элемент управления типа MenuItem, найдите его свойство Header (Заголовок) на панели Properties и установите в нем значение File (свойства на этой панели обнаруживаются быстрее всего в режиме поиска, но в качестве подсказки заметим, что свойство Header находится в области Common Properties). Присвойте данному элементу управления имя menuFile.

Редактор меню в Expression Blend действует подобно аналогичному редактору в Visual Studio. В частности, щелкнув правой кнопкой мыши на каком угодно объекте типа MenuItem непосредственно на монтажном столе, вы сможете добавить к нему пункты подменю и разделительные полосы из всплывающего контекстного меню. А если вы выберете какой угодно объект типа MenuItem на панели Objects and Timeline то сможете затем настроить любые его свойства и организовать обработку любого количества событий, связанных с этим объектом.

Еще раз выберите объект mnuFile на монтажном столе и щелкните на нем правой кнопкой мыши, чтобы добавить три пункта подменю. В целях рассматриваемого здесь примера присвойте свойствам Header этих элементов меню значения Play, Stop и Pause, а самим элементам — имена mnuPlay, mnuStop и mnuPause соответственно. По завершении построенная вами система меню должна выглядеть так, как показано на рисунке:

Построение системы меню

Обратите внимание на вложенный характер каждого компонента меню, отображаемого на панели Objects and Timeline. А теперь, когда у нас имеется элементарная система меню, мы можем приступить к созданию некоторых триггеров событий:

Иерархическое представление системы вложенных меню

Выберите объект mnuPlay на панели Objects and Timeline, переидите к панели Triggers и щелкните на кнопке +Event. Воспользуйтесь редактором триггеров на панели Triggers, чтобы запускать анимацию по раскадровке SpinButtonAnimation при выборе пункта меню File --> Play. Аналогичным образом организуйте остановку и приостановку анимации при выборе пунктов меню File --> Stop и File --> Pause соответственно:

Связывание триггеров событий с соответствующими пунктами меню

Вновь запустите приложение на выполнение и воспользуйтесь меню для управления анимацией по заданной раскадровке. Оцените по достоинству интерактивные возможности своего приложения, созданного без единой строки кода, написанной на C# или VB.

Просмотрите ради интереса разметку, автоматически сформированную в коде XAML. Вы обнаружите, что в коллекцию <Window.Triggers> теперь входит несколько элементов <EventTrigger>, предназначенных для манипулирования различными вариантами управления анимацией по заданной раскадровке.

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

Пройди тесты
Лучший чат для C# программистов