Объявление команд и элементов управления с помощью разметки ленты

Платформа ленты Windows использует язык разметки на основе XAML для декларативной реализации внешнего вида приложения ленты.

Отделение презентации от командной логики

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

Такое разделение представления и логики обеспечивает следующие преимущества:

  • Более эффективный цикл разработки приложений, который позволяет разработчикам пользовательского интерфейса и конструкторам реализовывать графический пользовательский интерфейс приложения ленты независимо от основных функциональных возможностей приложения. Эту основную функциональность можно оставить на выделенных разработчиков программного обеспечения.
  • Менее затратное обслуживание, так как изменения графического пользовательского интерфейса возможны без изменений в основных функциональных возможностях (и наоборот).
  • Простая спецификация строковых ресурсов и ресурсов изображений с помощью разметки.
  • Простота создания прототипов.

Структура разметки

В структуре разметки платформы ленты существуют две отдельные ветви.

Первая ветвь содержит манифест объявлений команд и ресурсов (строк и изображений). Каждая запись Command используется платформой для привязки элемента управления ленты с помощью идентификатора команды к обработчику команд, определенному в коде приложения.

Вторая ветвь содержит фактические объявления элементов управления. Каждый элемент управления связан с Command с помощью атрибута CommandName , который сопоставляется с атрибутом Name , указанным в каждом объявлении Command.

Компоненты ленты

Функциональность пользовательского интерфейса платформы ленты предоставляется через представления. Представление по сути является контейнером, например ribbon и ContextPopup, который используется для представления элементов управления платформы и команд, к которым они привязаны.

Представление ленты состоит из нескольких компонентов, которые включают меню приложения, панель быстрого доступа (QAT) для отображения часто используемых команд из пользовательского интерфейса ленты, основные и контекстные вкладки , содержащие группы элементов управления, а также полнофункциональная система контекстного меню ContextPopup.

Все компоненты ленты объявляются в отдельном файле разметки, который:

В следующих двух примерах разметки ленты показано, как набор элементов меню приложения ленты связан с именем и идентификатором команды.

  1. В этом разделе показаны объявления команд, необходимые для меню приложения с базовыми командами, такими как "Создать", "Открыть" и "Сохранить".

    <!-- Command declarations for the Application Menu. -->
    <Command Name="cmdFileMenu"
             Symbol="ID_FILE_MENU"
             Id="25000" />
    <!-- Command declaration for most recently used items. -->
    <Command Name="cmdMRUItems"
             Symbol="ID_FILE_MRUITEMS"
             Id="25050"/>
    <!-- Command declarations for Application Menu items. -->
    <Command Name="cmdNew"
             Symbol="ID_FILE_NEW"
             Comment="New"
             Id="25001"
             LabelTitle="&amp;New"/>
    <Command Name="cmdOpen"
             Symbol="ID_FILE_OPEN"
             Comment="Open"
             Id="25002"
             LabelTitle="&amp;&amp;Open"/>
    <Command>
      <Command.Name>cmdSave</Command.Name>
      <Command.Symbol>ID_FILE_SAVE</Command.Symbol>
      <Command.Comment>Save</Command.Comment>
      <Command.Id>25003</Command.Id>
      <Command.LabelTitle>
        <String>
          <String.Content>Label for Save</String.Content>
          <String.Id>59999</String.Id>
          <String.Symbol>strSave</String.Symbol>
        </String>
      </Command.LabelTitle>
      <Command.TooltipTitle>Tooltip title with &amp;&amp; for Save Command</Command.TooltipTitle>
      <Command.TooltipDescription>Tooltip description for Save Command.</Command.TooltipDescription>
      <Command.Keytip>s1</Command.Keytip>
    </Command>
    <Command Name="cmdPrint"
             Symbol="ID_FILE_PRINT"
             Comment="Save"
             Id="25004"
             LabelTitle="Print" />
    <Command Name="cmdExit"
             Symbol="ID_FILE_EXIT"
             Comment="Exit"
             Id="25005"
             LabelTitle="Exit" />
    
  2. В этом разделе показаны связанные объявления элемента управления.

    <!-- Control declarations for Application Menu items. -->
    <Ribbon.ApplicationMenu>
      <ApplicationMenu CommandName="cmdFileMenu">
        <!-- Most recently used items collection. -->
        <ApplicationMenu.RecentItems>
          <RecentItems CommandName="cmdMRUItems"/>
        </ApplicationMenu.RecentItems>
        <!-- Menu items collection. -->
        <MenuGroup>
          <Button CommandName="cmdNew" />
          <Button CommandName="cmdOpen" />
          <Button CommandName="cmdSave" />
        </MenuGroup>
        <MenuGroup>
          <Button CommandName="cmdPrint" />
          <Button CommandName="cmdExit" />
        </MenuGroup>
      </ApplicationMenu>
    </Ribbon.ApplicationMenu>
    

При компиляции разметки с помощью средства компилятора команд пользовательского интерфейса (UICC) имена и идентификаторы команд помещаются в файл заголовка, используемый ведущим приложением ленты.

Ниже приведен пример файла заголовка, созданного UICC.

// *****************************************************************************
// * This is an automatically generated header file for UI Element definition  *
// * resource symbols and values. Please do not modify manually.               *
// *****************************************************************************

#pragma once

#define cmdFileMenu 25000 
#define cmdNew 22001  /* New */ 
#define cmdNew_LabelTitle_RESID 60005
#define cmdOpen 22002  /* Open */ 
#define cmdOpen_LabelTitle_RESID 60006
#define cmdSave 22003  /* Save */ 
#define cmdSave_LabelTitle_RESID 60007
#define cmdSave_TooltipTitle_RESID 60008
#define cmdSave_TooltipDescription_RESID 60009

Язык XAML

Компиляция разметки ленты