Deklarieren von Befehlen und Steuerelementen mit Menübandmarkup
Das Windows-Menübandframework verwendet eine Markupsprache, die auf Extensible Application Markup Language (XAML) basiert, um die Darstellung einer Menübandanwendung deklarativ zu implementieren.
Trennen der Präsentation von der 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 spezifikation Extensible Application Markup Language (XAML) basiert. Funktionen auf niedriger Ebene, Anwendungshooks und Befehlshandler werden in Component Object Model (COM)-basierten Schnittstellenimplementierungen definiert.
Diese Trennung von Präsentation und Logik bietet die folgenden Vorteile:
- Ein effizienterer Anwendungsentwicklungszyklus, der es Benutzeroberflächenentwicklern und -designern ermöglicht, die GRAFISCHE BENUTZEROBERFLÄCHE der Menübandanwendung unabhängig von der Kernanwendungsfunktionalität zu implementieren. Diese Kernfunktionalität kann dedizierten Softwareentwicklern bleiben.
- Weniger kostspielige Wartung, da Änderungen an der grafischen Benutzeroberfläche ohne Änderungen an der Kernfunktionalität möglich sind (und umgekehrt).
- Einfache Angabe von Zeichenfolgen- und Bildressourcen durch Markup.
- Einfache Prototyperstellung.
Markupstruktur
In der Struktur des Menübandframeworkmarkups sind zwei unterschiedliche Verzweigungen vorhanden.
Der erste Branch enthält ein Manifest der 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.
Die zweite Verzweigung enthält die tatsächlichen Steuerelementdeklarationen. Jedes Steuerelement wird einem Befehl über ein CommandName-Attribut zugeordnet, das einem in jeder Befehlsdeklaration angegebenen Name-Attribut zugeordnet ist.
Menübandkomponenten
Die Benutzeroberflächenfunktion des Menübandframework wird über Ansichten verfügbar gemacht. Eine Ansicht ist im Wesentlichen ein Container, z. B. das Menüband und ContextPopup,der verwendet wird, um Frameworksteuerelemente und die Befehle, an die sie gebunden sind, zu präsentieren.
Die Menübandansicht besteht aus mehreren Komponenten, die ein Anwendungsmenü, die Symbolleiste für den Schnellzugriff (Quick Access Toolbar, QAT) zum Anzeigen häufig verwendeter Befehle über die Menübandbenutzeroberfläche, Kern- und Kontextregisterkarte, die Gruppen von Steuerelementen enthält, und das umfassende Kontextmenüsystem von ContextPopupumfassen.
Alle Menübandkomponenten werden in einer eigenständigen Markupdatei deklariert, die:
- Gibt die grundlegenden Eigenschaften für jedes Element an.
- Zeigt hierarchische Beziehungen eindeutig an.
- Gibt Layouteinstellungen und Skalierungshinweise an. Weitere Informationen zu Layoutvorlagen für das Menübandframework finden Sie unter Anpassen eines Menübands durch Größendefinitionen und Skalierungsrichtlinien.
- Bietet eine Möglichkeit zum Definieren von Ressourcen wie Bildern und Bezeichnungen. Weitere Informationen zu Bildressourcen finden Sie unter Angeben von Menübandbildressourcen.
Die folgenden beiden Menübandmarkupbeispiele veranschaulichen, wie ein Satz von Menübandanwendungsmenüelementen jeweils einem Befehlsnamen und einer ID zugeordnet wird.
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="&New"/> <Command Name="cmdOpen" Symbol="ID_FILE_OPEN" Comment="Open" Id="25002" LabelTitle="&&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 && 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" />In diesem Abschnitt werden die zugeordneten Steuerelementdeklarationen gezeigt.
<!-- 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 einer Headerdatei platziert, die von der Menübandhostanwendung verwendet wird.
Im Folgenden finden Sie ein Beispiel für eine Headerdatei, die von UICC generiert wird.
// *****************************************************************************
// * 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