Настройка Ribbon

39

Команды Ribbon

В основе элемента управления Ribbon лежат команды. Эти команды приводят в действие все части элемента управления Ribbon, в том числе его кнопки, меню приложения и панель быстрого запуска.

В отличие от стандартных меню и панелей инструментов в WPF, в Ribbon перехватывать события Click, поступающие от входящих в его состав элементов управления, не разрешено. Преимущество такого проектного решения в том, что он позволяет поставлять в элементе управления Ribbon более развитую модель команд. Недостаток решения в том, что оно не позволяет использовать специальные классы, унаследованные от RoutedCommand.

Ниже перечислены свойства, которые предлагаются в RibbonCommand в дополнение к свойствам RoutedCommand:

LabelTitle

Текст, который отображается на элементе ленты

LabelDescription

Дополнительный текст, который используется с некоторыми компонентами Ribbon. Например, это свойство отвечает за отображение необязательного заголовка над подменю элементов

SmallImageSource

Изображение, используемое при визуализации элемента в небольшом размере (16x16 пикселей на стандартном мониторе 96 dpi). Во избежание появления артефактов масштабирования при разной плотности пикселей рекомендуется использовать объект DrawingImage вместо растрового изображения

LargeImageSource

Изображение, используемое при визуализации элемента в большом размере (32x32 пикселя на стандартном мониторе 96 dpi). Во избежание появления артефактов масштабирования при разной плотности пикселей рекомендуется использовать объект DrawingImage вместо растрового изображения

ToolTipTitle

Заголовок, который отображается в верхней части подсказки для данного элемента. В Ribbon поддерживается новая модель подсказок, которая позволяет отображать всплывающие подсказки с большим количеством деталей, включающие заголовок, описание и изображение (а также нижний колонтитул с теми же деталями). Все эти детали необязательны, и устанавливать нужно только желаемые из них

ToolTipDescription

Текст, который отображается в подсказке под заголовком

ToolTipImageSource

Изображение, которое появляется в подсказке под заголовком слева от текстового описания

ToolTipFooterTitle

Текст, который отображается в заголовке нижнего колонтитула внутри подсказки

ToolTipFooterDescription

Текст, который отображается в нижнем колонтитуле внутри подсказки под заголовком

ToolTipFooterImageSource

Изображение, которое появляется слева от текста нижнего колонтитула внутри подсказки

Следует отметить, что эти свойства применяются не во всех случаях. Например, RibbonCommand часто используется для установки рисунка, который должен отображаться на кнопке меню приложения. Для этой команды свойства LargeImageSource и SmallImageSource важны, а свойство LabelTitle игнорируется.

Для получения качественных изображений при создании большинства приложений будет привлекаться дизайнер графики. Однако на этапе тестирования приложения вполне могут использоваться метки-заполнители и стандартные изображения, поставляемые в Visual Studio. Поищите файл VS2010ImageLibrary.zip в папке вроде c:\Program Files\Microsoft Visual Studio 10.0\Common7\VS2010ImageLibrary\1033.

Меню приложения

Самым простым способом приступить к работе с элементом управления Ribbon является заполнение его меню приложения.

В основе меню приложения лежат два простых класса: RibbonApplicationMenu (унаследованный от MenuBase) и RibbonMenuItem (унаследованный от MenuItem). Это определяет шаблон, который будет встречаться повсюду в настоящем разделе — класс Ribbon порождает специализированные версии базовых классов элементов управления WPF.

Строго говоря, этот шаблон не идеален. Элементы управления ToolBar и StatusBar имеют более чистую модель, поскольку способны работать со стандартными элементами управления WPF, для которых просто задают другой стиль. Но элементу управления Ribbon требуется дополнительный уровень производных классов для того, чтобы поддерживать многие из его усовершенствованных функциональных возможностей. Например, классы RibbonApplicationMenu и RibbonApplicationMenuItem совершенствуют обычные классы меню добавлением поддержки для RibbonComand.

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

Для конфигурирования каждой команды необходимо просто предоставить объект RibbonCommand. Этот объект указывает текст, который должен отображаться для данной команды в меню (через свойство LabelTitle), и дополнительную подсказку, которая должна для нее появляться (с использованием свойств ToolTipTitle, ToolTipDescription и т.д), дополнительное изображение (LargeImageSource) и обработчик событий, который должен срабатывать при выполнении на элементе меню щелчка (Executed).

Ниже приведен пример, в котором меню заполняется тремя командами (без установки необязательных свойств, касающихся подсказки):

<r:Ribbon Title="Ribbon Test">
   <r:Ribbon.ApplicationMenu>
      <r:RibbonApplicationMenu>
         <r:RibbonApplicationMenuItem>
            <r:RibbonApplicationMenuItem.Command>
            <r:RibbonCommand LabelTitle="_Close" LargeImageSource="images\close.png"
               Executed="Close_Executed" />
            </r:RibbonApplicationMenuItem.Command>
         </r:RibbonApplicationMenuItem>
         
      <r:RibbonApplicationMenuItem>
          <r:RibbonApplicationMenuItem.Command>
             <r:RibbonCommand LabelTitle="_Open" LargeImageSource="images\open.png" Executed="Open_Executed" />
          </r:RibbonApplicationMenuItem.Command>
      </r:RibbonApplicationMenuItem>

     <r:RibbonApplicationMenuItem>
        <r:RibbonApplicationMenuItem.Command>
           <r:RibbonCommand LabelTitle="_Save" LargeImageSource="images\save.png"
              Executed="Save_Executed" />
        </r:RibbonApplicationMenuItem.Command>
     </r:RibbonApplicationMenuItem>
   </r:RibbonApplicationMenu>
  </r:Ribbon.ApplicationMenu>
</r:Ribbon>

В этом примере команды объявляются прямо там, где используются. Более удобный подход предполагает создание команд в виде ресурсов с последующим добавлением ссылок на эти ресурсы (с использованием расширения StaticResource) или присоединением их с помощью привязок команд. Такой подход предоставляет возможность использовать команды более гибким образом — например, в ответ на другие действия, такие как сокращенные клавиатурные команды или щелчки на других элементах управления Ribbon.

Объект RibbonApplicationMenu наивысшего уровня тоже нуждается в объекте RibbonCommand, хотя и не используется для запуска команды! Причиной являются несколько других свойств, таких как свойства, связанные с подсказкой, и свойства изображения (которые устанавливают изображение, появляющееся внутри кнопки меню приложения). В случае применения используемого по умолчанию стиля Windows 7 потребуется установить свойство SmallImage, а для стилей Office 2007, которые предусматривают отображение большой кнопки приложения — свойство LargeImageSource.

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