Erneutes Konfigurieren des Menübands mit Anwendungsmodi
Das Windows Menübandframework unterstützt das dynamische Neukonfigurieren und Verfügbarmachen von Kernelementen der Menübandbenutzeroberfläche zur Laufzeit basierend auf dem Zustand der Anwendung (auch als Kontext bezeichnet). Deklariert und bestimmten Elementen im Markup zugeordnet, werden die verschiedenen von einer Anwendung unterstützten Zustände als Anwendungsmodi bezeichnet.
- Introduction (Einführung)
- Kontextbezogene Benutzeroberfläche
- Implementieren von Anwendungsmodi
- Anmerkungen
- Zugehörige Themen
Einführung
Anwendungsmodi bestehen aus logischen Gruppen von Steuerelementen, die einige kernige Anwendungsfunktionen auf der Menübandbenutzeroberfläche verfügbar machen. Diese Modi werden von der Anwendung durch einen Aufruf der Frameworkmethode IUIFramework::SetModesdynamisch aktiviert oder deaktiviert, wodurch die Sichtbarkeit eines oder mehrerer Anwendungsmodi aktiviert oder deaktiviert wird.
Kontextbezogene Benutzeroberfläche
Das Menübandframework bietet umfassende Benutzerfreundlichkeit, indem dynamische Steuerelemente integriert werden, die nahtlos auf Benutzerinteraktion und Anwendungskontext reagieren. Diese umfangreiche kontextbezogene Benutzeroberfläche wird durch eine Kombination der folgenden Mechanismen bereitgestellt:
- Kataloge: sammlungsbasierte Steuerelemente, die die dynamische Bearbeitung ihrer Elementauflistungen unterstützen.
- Kontextbezogene Registerkarten: Menübandregisterkarten, deren Sichtbarkeit durch eine Änderung des Arbeitsbereichskontexts bestimmt wird, z. B. die Auswahl eines Bilds in einem Dokument.
- Anwendungsmodi: Kernanwendungsfunktionen, die vom Anwendungskontext abhängen.
In einigen Punkten werden Anwendungsmodi funktionell ähnlich wie kontextbezogene Registerkarten angezeigt. Der grundlegende Unterschied liegt jedoch in der Absicht und dem Umfang der einzelnen Bereiche.
Kontextbezogene Steuerelemente werden als Reaktion auf eine Änderung des Kontexts innerhalb einer Anwendung aktiviert. Beispielsweise wird in Microsoft Paint für Windows 7 eine kontextbezogene Registerkarte angezeigt, die Gruppen von textbezogenen Befehlen enthält, wenn ein Benutzer einen Textbereich in den Arbeitsbereich einfügt. Diese kontextbezogene Registerkarte enthält keine Kernbefehle für die Anwendung und wird nur in der Benutzeroberfläche verfügbar gemacht, da sich der Kontext innerhalb der Anwendung geändert hat. Die Kernfunktionalität der Anwendung (die Befehle zur Bildbearbeitung) ist weiterhin relevant und für den Benutzer verfügbar, auch wenn die Kontextregisterkarte sichtbar ist.
Anwendungsmodi unterscheiden sich von kontextbezogenen Steuerelementen darin, dass sie die Funktionalität als Reaktion auf Änderungen im Kontext neu konfigurieren, in dem die Anwendung arbeitet. Anwendungsmodi befinden sich auf einer höheren Abstraktionsebene. sie bieten eine Möglichkeit, die Kernfunktionalität einer Anwendung neu zu konfigurieren, anstatt funktionen, die keine Kernkomponente der Benutzeroberfläche sind, vorübergehend verfügbar zu machen. Beispielsweise tritt in Microsoft Paint für Windows 7 ein Schalter im Anwendungsmodus auf, wenn der Befehl Seitenansicht aufgerufen wird. Wenn Microsoft Paint zur Druckvorschau wechselt, ändert sich der Kontext, in dem die Anwendung arbeitet, von der Bearbeitung bis zur Vorschau. Daher ändert sich die Kernfunktionalität der Anwendung, bis die Druckvorschau abgebrochen wird und die Anwendung wieder in den Bearbeitungskontext wechselt.
Ein einfaches Anwendungsmodusszenario
Das folgende Szenario veranschaulicht, wie Anwendungsmodi in einer Anwendung namens RibbonApp verwendet werden, um diskrete Aspekte der Kernfunktionalität verfügbar zu machen.
In RibbonApp sind zwei Anwendungsmodi definiert:
- Im einfachen Modus werden grundlegende Befehle auf der Menübandbenutzeroberfläche verfügbar gemacht. Diese Befehle werden jederzeit angezeigt, unabhängig davon, welcher Anwendungsmodus aktiv ist.
- Im erweiterten Modus werden komplexe Befehle verfügbar gemacht, die für erfahrene Benutzer der Anwendung vorgesehen sind. Diese erweiterten Befehle werden zusätzlich zu den einfachen Befehlen auf der Menüband-Benutzeroberfläche angezeigt.
Standardmäßig ist RibbonApp so festgelegt, dass sie im einfachen Modus geöffnet wird, und die befehle, die von unerfahrenen Benutzern benötigt werden, werden im Anwendungsmenü und auf der Registerkarte Start angezeigt. Die folgenden Screenshots zeigen das Menü menübandApp-Anwendungsmenü und die Registerkarte Start im einfachen Modus, wobei die modalen Steuerelemente hervorgehoben werden.


Obwohl diese Befehle für erfahrene Benutzer ausreichend sein können, unterstützt die RibbonApp auch erfahrene Benutzer über einen erweiterten Modus, der bei Aktivierung durch Klicken auf die Schaltfläche Zum erweiterten Modus wechseln im Anwendungsmenü zusätzliche Kernfunktionen anzeigt.
Dieses Szenario lässt sich problemlos implementieren, indem verschiedene Elemente im Markup an diskrete Anwendungsmodi gebunden werden, die bei Bedarf ein- und ausgeschaltet werden können. Die folgenden Screenshots zeigen das Menü menübandApp-Anwendungsmenü und die Registerkarte Start im erweiterten Modus, wobei die modalen Steuerelemente hervorgehoben werden.


Implementieren von Anwendungsmodi
In diesem Abschnitt werden die drei Schritte beschrieben, die in der Regel für die Implementierung der Anwendungsmodi des Menübandframeworks erforderlich sind. RibbonApp wird verwendet, um ein Beispiel für jeden Schritt bereitzustellen.
Identifizieren der Modi
Jeder Modus in einer Anwendung sollte einen logischen Satz von Funktionen darstellen, die vom Kontext abhängen, in dem eine Anwendung arbeiten kann. Wenn eine Anwendung beispielsweise Steuerelemente anzeigt, die nur relevant sind, wenn eine Netzwerkverbindung erkannt wird, werden diese Steuerelemente in einem Netzwerkkontext ausgeführt, der die Erstellung eines Netzwerkmodus rechtfertigen kann.
RibbonApp verfügt über zwei Kontexte, die jederzeit aktiv sein können: Einfach und Erweitert. Aus diesem Grund erfordert RibbonApp zwei Modi: Einfach und Erweitert.
Zuweisen von Steuerelementen zu Anwendungsmodi
Nachdem die Anwendungsmodi identifiziert wurden, weisen Sie jedes Menübandsteuerelement einem Modus zu, indem Sie ein ApplicationModes-Attribut im Markup für die Steuerelementelemente deklarieren, die Anwendungsmodi unterstützen.
Die Menübandansicht ermöglicht die Angabe von Modi für die folgenden Steuerelementelemente:
- Core Tab-Elemente.
- Gruppieren von Elementen, die untergeordnete Elemente eines Tab-Kernelements sind.
- Button-, SplitButton-und DropDownButton-Elemente, die einer MenuGroup im Anwendungsmenüzugewiesen sind.
Hinweis
Schaltflächen-, SplitButton-und DropDownButton-Elemente können nur dann einem Modus zugewiesen werden, wenn sie im Anwendungsmenügehostet werden.
Im Menübandframework werden diese Steuerelementelemente als modale Steuerelemente bezeichnet. Sie werden nur angezeigt, wenn ein Modus, an den sie gebunden sind, in der Benutzeroberfläche aktiv ist.
Steuerelementelemente, die in einem modalen Steuerelement enthalten sind, erben das Anwendungsmodusverhalten. Wenn z. B. ein modales Gruppensteuerelement einem erweiterten Modus zugewiesen ist und der Modus Erweitert nicht aktiv ist, werden diese Gruppe und alle darin verwendeten Steuerelemente , modal oder anderweitig, in der Menüband-Benutzeroberfläche nicht angezeigt.
Mithilfe des ApplicationModes-Attributs werden Modi modalen Steuerelementen in einer 1:N-Beziehung (1:n) zugewiesen, wobei ein einzelnes modales Steuerelement mehreren Modi zugeordnet werden kann.
Das Menübandframework bezieht sich numerisch auf Modi von 0 bis 31, wobei Modus 0 als Standardmodus betrachtet wird, der automatisch aktiviert wird, wenn eine Menübandanwendung gestartet wird. Jedes modale Steuerelement, das kein ApplicationModes-Attribut angibt, wird als Mitglied des Standardmodus betrachtet.
In RibbonApp ist Einfach der Standardmodus, wobei die Funktionalität im erweiterten Modus nur angezeigt wird, wenn sie vom Benutzer initiiert wird.
Im folgenden Beispiel wird das für RibbonApp erforderliche Markup veranschaulicht.
<Application.Views>
<Ribbon>
<!--Application Menu-->
<Ribbon.ApplicationMenu>
<ApplicationMenu CommandName='cmdAppMenu'>
<MenuGroup>
<Button CommandName='cmdSave'/>
<Button CommandName='cmdExportMetadata' ApplicationModes='1'/>
</MenuGroup>
<MenuGroup>
<Button CommandName='cmdSwitchModes' ApplicationModes ='0,1'/>
<Button CommandName='cmdExit'/>
</MenuGroup>
</ApplicationMenu>
</Ribbon.ApplicationMenu>
<!--Tabs-->
<Ribbon.Tabs>
<!--Home Tab-->
<Tab CommandName='cmdHomeTab'>
<!--Scaling Policy for Home tab-->
<Tab.ScalingPolicy>
<ScalingPolicy>
<ScalingPolicy.IdealSizes>
<Scale Group='cmdSimpleControlsGroup' Size='Medium'/>
</ScalingPolicy.IdealSizes>
</ScalingPolicy>
</Tab.ScalingPolicy>
<!--Simple Controls Group-->
<Group CommandName='cmdSimpleControlsGroup' SizeDefinition='ThreeButtons-OneBigAndTwoSmall'>
<Button CommandName="cmdPaste" />
<Button CommandName='cmdCut'/>
<Button CommandName='cmdCopy'/>
</Group>
</Tab>
<!--Advanced Tab-->
<Tab CommandName='cmdAdvancedTab' ApplicationModes='1'>
<!--Advanced Controls Group-->
<Group CommandName='cmdMetadataGroup' ApplicationModes='1' SizeDefinition='TwoButtons'>
<Button CommandName='cmdEditMetadata' />
<Button CommandName='cmdCheckErrors' />
</Group>
</Tab>
</Ribbon.Tabs>
</Ribbon>
</Application.Views>
In diesem Beispiel wird Folgendes veranschaulicht:
- Der Standardmodus 0 muss nicht explizit deklariert werden. Da modale Steuerelemente, die das ApplicationModes-Attribut nicht angeben, automatisch an Modus 0 gebunden werden (einfacher Modus im RibbonApp-Beispiel), ist es nicht erforderlich, das Attribut explizit für modale Standardsteuerelemente zu deklarieren.
- Steuerelemente können an mehrere Modi gebunden werden. Für RibbonApp ist die einzige Notwendigkeit für das ApplicationModes-Attribut in einem Steuerelement im einfachen Modus die
cmdSwitchModesSchaltfläche , da sie teil des Simple- und Advanced-Modus ist. Wenn einer der Modi aktiv ist, wird dieses Steuerelement im Anwendungsmenüangezeigt. - Modale Steuerelemente erben nicht von ihren eltern. Die Registerkarte Erweitert von RibbonApp enthält eine Metadatengruppe. beide modalen Steuerelemente werden Modus 1 (Erweiterter Modus) zugewiesen. Das Zuweisen der Registerkarte Erweitert zu Modus 1 weist nicht automatisch untergeordnete Steuerelemente wie die Gruppe Metadaten dem Modus 1 zu. Dadurch kann jede Gruppe innerhalb einer Registerkarte zur Laufzeit unabhängig aktiviert oder deaktiviert werden.
- Nicht modale Steuerelemente können sich weiterhin auf Modusschalter verlassen. Die Schaltflächen Edit Metadata (Metadaten bearbeiten) und Check for Errors (Auf Fehler überprüfen) von RibbonApp sind nur für fortgeschrittene Benutzer verfügbar, wenn der Benutzer in den erweiterten Modus wechselt. Schaltflächensteuerelemente, die nicht im Anwendungsmenü gehostet werden, sind nicht modal. Da diese Schaltflächen jedoch in einem modalen Steuerelement (der Metadatengruppe) gehostet werden, sind sie sichtbar, wenn die Gruppe sichtbar ist. Daher werden diese Schaltflächen angezeigt, wenn der erweiterte Modus aktiviert ist und die Gruppe Metadaten auf der Menübandbenutzeroberfläche verfügbar gemacht wird.
Wechseln von Modi zur Laufzeit
Nachdem Modi im Markup definiert wurden, können sie als Reaktion auf Kontextereignisse einfach aktiviert oder deaktiviert werden. Wie bereits erwähnt, werden Menübandanwendungen immer im Standardmodus 0 gestartet. Nachdem die Anwendung initialisiert wurde und Modus 0 aktiv ist, kann der Satz aktiver Modi durch Aufrufen der IUIFramework::SetModes-Funktion geändert werden. Diese Funktion akzeptiert eine 32-Bit-Ganzzahl als bitweise Darstellung der Modi, die aktiv sein sollen. Das am wenigsten signifikante Bit stellt Modus 0 und das wichtigste Bit den Modus 31 dar. Wenn ein Bit auf 0 (null) festgelegt ist, ist der Modus auf der Menüband-Benutzeroberfläche nicht aktiv.
Wenn ein Benutzer in RibbonApp den Modus Erweitert aktiviert, werden die erweiterten Befehle zusammen mit den einfachen Befehlen angezeigt. Der Befehlshandler für die Schaltfläche Zum erweiterten Modus wechseln ruft IUIFramework::SetModes auf, um die Modi 0 (Simple) und 1 (Advanced) als aktiv in der Benutzeroberfläche festzulegen. Das folgende Beispiel ist der RibbonApp-Code für diesen Funktionsaufruf:
const int SIMPLE_MODE = 0;
const int ADVANCED_MODE = 1;
pFramework->SetModes( UI_MAKEAPPMODE(SIMPLE_MODE) | UI_MAKEAPPMODE(ADVANCED_MODE) );
Hinweis
Das MAKEAPPMODE-Makro des Menübandframeworks _ vereinfacht das ordnungsgemäße Festlegen dieser Bits als Vorbereitung auf den Aufruf von IUIFramework::SetModes.
In diesem Beispiel wird Folgendes veranschaulicht:
- Verwenden Sie das _ MAKEAPPMODE-Makro der Benutzeroberfläche, um einen Modussatz zu erstellen.
- Modi werden explizit und atomisch festgelegt. Der ganzzahlige Wert, der an IUIFramework::SetModes übergeben wird, stellt die Modi dar, die nach der Rückgabe der Funktion aktiv sind. Obwohl der Einfache Modus zuvor aktiv war, muss IUIFramework::SetModes angeben, dass der Einfache Modus aktiv bleibt, wenn der Erweiterte Modus aktiviert ist.
- Der Standardmodus kann entfernt werden. Obwohl in RibbonApp der Standardmodus (Modus 0) nie entfernt wird, kann er mit dem folgenden Aufruf entfernt werden: , wobei nur die erweiterten Befehle in der Benutzeroberfläche
g_pFramework->SetModes(UI_MAKEAPPMODE(ADVANCED_MODE))verfügbar sind.
Hinweis
Wenn die Modi einer Anwendung neu konfiguriert werden, versucht das Menüband, die zuvor ausgewählte Registerkarte auf der Benutzeroberfläche zu erhalten. Wenn die neue Gruppe von Modi nicht mehr die Registerkarte enthält, die vor dem Aufruf ausgewählt wurde, wählt das Menüband die Registerkarte im Layout aus, die dem Anwendungsmenü am nächsten liegt. Diese Registerkarte enthält die Befehle, die für den Benutzer am relevantesten sind. Weitere Informationen finden Sie unter Richtlinien für die Menüband-Benutzeroberfläche.
Bemerkungen
Das Menüband muss immer mindestens einen aktiven Modus haben. Wenn eine Anwendung versucht, alle Modi durch Aufrufen von IUIFramework::SetModes mit dem Moduswert 0 zu deaktivieren, wird E FAIL zurückgegeben, und der aktive Modussatz bleibt _ unverändert.
Das Framework erfordert, dass immer mindestens eine Registerkarte auf der Menüband-Benutzeroberfläche vorhanden ist. Daher muss mindestens eine Registerkarte vom Standardmodus (Modus 0) und nach jedem Moduswechsel verfügbar gemacht werden.
Nicht alle Bereiche der Menüband-Benutzeroberfläche sind von Anwendungsmodi betroffen. Wenn z. B. das Deaktivieren eines Modus dazu führt, dass Schaltflächen aus dem Menüband entfernt werden, die zuvor der Symbolleiste für den Schnellzugriff hinzugefügt wurden,verbleiben diese Schaltflächen in der Symbolleiste für den Schnellzugriff, sodass Benutzer die befehle ausführen können, die an die Schaltflächen gebunden sind. Wenn ein Befehl zu mindestens einem inaktiven Modus gehört, sollte dieser Befehl auch deaktiviert werden, indem die _ PKEY _ Enabled-Eigenschaft der Benutzeroberfläche auf 0 (VARIANT FALSE) festgelegt _ wird.