Deklarieren von Befehlen und Steuerelementen mit Menübandmarkup

Das Windows-Menübandframework verwendet eine Markupsprache, die auf XAML (Extensible Application Markup Language) basiert, um die Darstellung einer Menübandanwendung deklarativ zu implementieren.

Trennen von Präsentation und Befehlslogik

Die Trennung von Darstellungs- und visuellen Attributen von der Befehlslogik im Menübandframework erfolgt über zwei unterschiedliche, aber abhängige Entwicklungsplattformen. Steuerelementlayouts, Skalierungsverhalten, Befehlsdeklarationen und Ressourcenspezifikationen sind die Entwurfszeitdomäne einer deklarativen Markupsyntax, die auf der XAML-Spezifikation (Extensible Application Markup Language) basiert. Low-Level-Funktionalität, Anwendungshooks und Befehlshandler werden in COM-basierten Schnittstellenimplementierungen (Component Object Model) definiert.

Diese Trennung von Darstellung und Logik bietet die folgenden Vorteile:

  • Ein effizienterer Anwendungsentwicklungszyklus, mit dem Benutzeroberflächenentwickler und Designer die GUI der Menübandanwendung unabhängig von der Kernfunktionalität der Anwendung implementieren können. Diese Kernfunktionalität kann dedizierten Softwareentwicklern überlassen werden.
  • Weniger kostspielige Wartung, da Änderungen an der GRAFISCHEn Benutzeroberfläche ohne Änderungen an der Kernfunktionalität möglich sind (und umgekehrt).
  • Einfache Spezifikation von Zeichenfolgen- und Bildressourcen durch Markup.
  • Einfache Prototyperstellung.

Markupstruktur

In der Struktur des Menüband-Framework-Markups sind zwei unterschiedliche Verzweigungen vorhanden.

Der erste Branch enthält ein Manifest von Befehls- und Ressourcendeklarationen (Zeichenfolgen und Bilder). Jeder Befehlseintrag wird vom Framework verwendet, um ein Menüband-Steuerelement über eine Befehls-ID an einen im Anwendungscode definierten Befehlshandler zu binden.

Der zweite Branch enthält die eigentlichen Kontrolldeklarationen. Jedes Steuerelement wird einem Command über ein CommandName-Attribut zugeordnet, das einem In jeder Command-Deklaration angegebenen Name-Attribut zugeordnet ist.

Menübandkomponenten

Die Benutzeroberflächenfunktionalität des Menübandframeworks wird über Ansichten verfügbar gemacht. Eine Ansicht ist im Wesentlichen ein Container, z. B. das Menüband und ContextPopup, mit dem Frameworksteuerelemente und die Befehle dargestellt werden, an die sie gebunden sind.

Die Menübandansicht besteht aus mehreren Komponenten, die ein Anwendungsmenü, die Symbolleiste für den Schnellzugriff (QAT) zum Anzeigen häufig verwendeter Befehle über die Menübandbenutzeroberfläche, Kernregisterkarten und kontextbezogene Registerkarten, die Gruppen von Steuerelementen enthalten, und das umfassende Kontextmenüsystem des ContextPopup.

Alle Menübandkomponenten werden in einer eigenständigen Markupdatei deklariert, die:

Die folgenden beiden Menübandmarkupbeispiele veranschaulichen, wie jeweils ein Satz von Menüband-Anwendungsmenüelementen einem Befehlsnamen und einer ID zugeordnet wird.

  1. In diesem Abschnitt werden die Befehlsdeklarationen gezeigt, die für ein Anwendungsmenü mit grundlegenden Befehlen wie Neu, Öffnen und Speichern erforderlich sind.

    <!-- 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. In diesem Abschnitt werden die zugeordneten Control-Deklarationen angezeigt.

    <!-- 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>
    

Wenn das Markup mit dem UICC-Tool (UI Command Compiler) kompiliert wird, werden die Befehlsnamen und IDs in eine Headerdatei eingefügt, die von der Menübandhostanwendung verwendet wird.

Im Folgenden finden Sie ein Beispiel für eine von UICC generierte Headerdatei.

// *****************************************************************************
// * 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

Extensible Application Markup Language (XAML)

Kompilieren des Menübandmarkups