Anpassen der Office 2010-Backstage-Ansicht für Entwickler
Zusammenfassung: In Microsoft Office 2010 wird eine neue Oberfläche mit dem Namen Backstage-Ansicht eingeführt. In Beispielen erfahren Sie, wie Sie die Benutzeroberfläche für Ihre eigenen Anwendungen erweitern können.
Letzte Änderung: Freitag, 24. April 2015
Gilt für: Excel 2010 | Office 2007 | Office 2010 | Open XML | PowerPoint 2010 | SharePoint Server 2010 | VBA | Word 2010
Inhalt dieses Artikels
Einführung in die Microsoft Office-Backstage-Ansicht
Initialisieren der benutzerdefinierten Benutzeroberfläche
Durchführen von Aktionen beim ersten Anzeigen oder Ausblenden der Backstage-Ansicht
Erstellen einer Schaltfläche für einen Schnellbefehl
Erstellen der drei Typen von Spaltenlayouts in der Backstage-Ansicht
Einfügen einer benutzerdefinierten Gruppe auf einer integrierten Registerkarte
Einfügen einer benutzerdefinierten Aufgabe auf einer integrierten Registerkarte
Dynamisches Ändern der Sichtbarkeit von Gruppen
Angeben des Layouts von Steuerelementen
Dynamisches Festlegen des Formats eines Steuerelements zum Hervorheben seines Status
Synchronisieren der Sichtbarkeit einer Gruppe von Steuerelementen mit einer anderen Gruppe von Steuerelementen
Schlussbemerkung
Weitere Ressourcen
Published: November 2009
Provided by: Mirko Mandic, Microsoft Corporation | Frank Rice, Microsoft Corporation
Inhalt
Einführung in die Microsoft Office-Backstage-Ansicht
Initialisieren der benutzerdefinierten Benutzeroberfläche
Durchführen von Aktionen beim ersten Anzeigen oder Ausblenden der Backstage-Ansicht
Erstellen einer Schaltfläche für einen Schnellbefehl
Erstellen der drei Typen von Spaltenlayouts in der Backstage-Ansicht
Einfügen einer benutzerdefinierten Gruppe auf einer integrierten Registerkarte
Einfügen einer benutzerdefinierten Aufgabe auf einer integrierten Registerkarte
Dynamisches Ändern der Sichtbarkeit von Gruppen
Angeben des Layouts von Steuerelementen
Dynamisches Festlegen des Formats eines Steuerelements zum Hervorheben seines Status
Synchronisieren der Sichtbarkeit einer Gruppe von Steuerelementen mit einer anderen Gruppe von Steuerelementen
Schlussbemerkung
Weitere Ressourcen
Einführung in die Microsoft Office-Backstage-Ansicht
Eins der neuesten Features in Microsoft Office 2010 System stellt die Microsoft Office Backstage-Ansicht dar. In dieser Benutzeroberfläche (User Interface, UI), die über die Registerkarte Datei verfügbar ist, sind Aufgaben und Aktionen auf Dateiebene kombiniert. Sie ersetzt die ähnlichen Funktionen, die über die Microsoft Office-Schaltfläche in vorherigen Versionen von Microsoft Office System verfügbar waren.
Hinweis
Weitere einführende Informationen einschließlich der Element- und Attributbeschreibungen sowie Rückrufsignaturen finden Sie in dem Artikel mit dem Titel Einführung in die Office 2010-Backstage-Ansicht für Entwickler.
Wie die Benutzeroberfläche des Microsoft Office Fluent-Menübands ist auch die Backstage-Ansicht vollständig erweiterbar. Hierzu werden mithilfe von XML die Struktur und Komponenten sowie der Programmiercode definiert, auch Rückrufprozeduren genannt, damit diese Komponenten ordnungsgemäß ausgeführt werden können. Wenn Ihnen das Erweitern der Benutzeroberfläche des Menübands vertraut ist, können Sie auch die vorhandenen Registerkarten problemlos aktualisieren und eine benutzerdefinierte Benutzeroberfläche für die Backstage-Ansicht erstellen.
Sie können benutzerdefinierte Backstage-Ansichten erstellen, indem Sie Office Open XML-Formatdateien für dokumentspezifische Anpassungen oder COM-Add-Ins für Anpassungen auf Anwendungsebene verwenden. Zahlreiche weitere Informationen zu diesen beiden Erweiterungsmethoden für die Benutzeroberfläche finden Sie in einer Reihe von Artikeln mit dem Titel Anpassen der Menüband-Benutzeroberfläche von Office (2007) für Entwickler.
Hinweis
Den in diesem Artikel beschriebenen Beispielcode finden Sie als herunterladbare Datei unter https://code.msdn.microsoft.com/.
In den folgenden Szenarien wird der XML- und der Microsoft Visual Basic for Applications (VBA)-Code zum Anpassen der Backstage-Ansicht in Microsoft Excel 2010 beschrieben.
Hinweis
Zur Unterstützung beim Hinzufügen von XML und Bildern zu den Microsoft Office 2010-Programmen können Sie den Custom UI Editor verwenden. Den Downloadlink für diesen Editor finden Sie am Ende dieses Artikels.
Initialisieren der benutzerdefinierten Benutzeroberfläche
Mit dem onLoad-Attribut des <customUI>-Elements wird auf Code gezeigt, mit dem auf die Benutzeroberfläche verwiesen wird und mit dem die im Code verwendeten Variablen initialisiert werden. Sie können den Rückruf für dieses Ereignis angeben, indem Sie das onLoad-Attribut des <customUI>-Elements festlegen.
<customUI xmlns="https://schemas.microsoft.com/office/2009/07/customui" onLoad="OnLoad">
Mit der folgenden Rückrufprozedur wird zunächst über das RibbonUI-Objekt auf die Benutzeroberfläche verwiesen. Dann werden mehrere Variablen initialisiert, die in dem in diesem Artikel beschriebenen Beispielcode verwendet werden.
Private processRibbon As IRibbonUI
Sub OnLoad(ribbon As IRibbonUI)
Set processRibbon = ribbon
engGrpVisible = True
taskOneComplete = False
taskTwoComplete = False
taskThreeComplete = False
taskFourComplete = False
issueResolved = False
issueVisibility = True
End Sub
Durchführen von Aktionen beim ersten Anzeigen oder Ausblenden der Backstage-Ansicht
Es kann Situationen geben, in denen Sie eine Aktion ausführen möchten, wenn die Backstage-Ansicht angezeigt ist oder wenn sie nicht mehr angezeigt wird. Möglicherweise möchten Sie z. B. eine Registerkarte anzeigen oder ausblenden, wenn ein bestimmtes Ereignis auftritt, wenn z. B. ein bestimmtes Datum überschritten wird. Mit dem onShow-Attribut und dem onHide-Attribut des <backstage>-Elements kann auf Code gezeigt werden, der eine solche Aktion ausführt. Es folgt ein Beispiel zur Verwendung des onShow-Attributs zum Festlegen des Formats für eine Schaltfläche in einer Gruppe.
<backstage onShow="OnShow">
<group id="workStatusGroup" label="Work Status" getHelperText="GetStatusHelperText" getStyle="GetWorkStatusStyle" >
<primaryItem>
<button id="sendStatusMailButton" label="Send Status E-Mail" imageMso="ReplyAll" />
</primaryItem>
</group>
Sehen Sie sich den folgenden VBA-Code an. Abhängig vom Datumswert wird die Variable showGrpStyle auf einen der folgenden drei Werte festgelegt:
BackstageGroupStyle.BackstageGroupStyleNormal. Die Gruppe wird nicht besonders hervorgehoben,
BackstageGroupStyle.BackstageGroupStyleWarning. Die Gruppe wird in Gelb hervorgehoben,
BackstageGroupStyle.BackstageGroupStyleError. Die Gruppe wird in Rot hervorgehoben.
Sub OnShow(ByVal contextObject As Object)
If (Date < #9/29/2009#) Then
showGrpStyle = BackstageGroupStyle.BackstageGroupStyleWarning
ElseIf ((Date >= #9/29/2009#) And (Date < #10/1/2009#)) Then
showGrpStyle = BackstageGroupStyle.BackstageGroupStyleError
Else
showGrpStyle = BackstageGroupStyle.BackstageGroupStyleNormal
End If
processRibbon.Invalidate
End Sub
Sub GetWorkStatusStyle(control As IRibbonControl, ByRef returnedVal)
returnedVal = showGrpStyle
End Sub
XML und Code arbeiten wie folgt zusammen:
Die Backstage-Ansicht wird angezeigt, wodurch die OnShow-Rückrufprozedur ausgelöst wird.
Der Code in der OnShow-Prozedur überprüft das Datum und legt abhängig vom Wert die showGrpStyle-Zeichenfolgevariable auf eine der drei Enumerationen des BackstageGroupStyle-Objekts fest.
Dann wird vom Code die processRibbon.Invalidate-Methode ausgeführt, die ein Zurücksetzen der Benutzeroberfläche verursacht. Daher wird für jedes Steuerelement in der Backstage-Ansicht die Rückrufprozedur ausgeführt.
Das getStyle-Attribut der workStatusGroup-Gruppe zeigt auf die Rückrufprozedur GetWorkStatusStyle, die den Wert der Variablen showGrpStylezurückgibt, bei dem es sich in diesem Fall um einen der Enumerationswerte handelt. Dadurch wird das Format der Gruppe festgelegt.
Erstellen einer Schaltfläche für einen Schnellbefehl
Schnellbefehle sind für Optionen nützlich, die häufig verwendet werden müssen. Mit dem folgenden XML wird eine benutzerdefinierte Schaltfläche für einen Schnellbefehl erstellt, mit dem die aktuelle Arbeitsmappe gespeichert wird. Zudem wird das isDefinitive-Attribut zum Schließen der Backstage-Ansicht verwendet, und der Benutzer wird zur Arbeitsmappe zurückgeführt. In Abbildung 1 ist der von diesem XML-Markup erstellte Schnellbefehl dargestellt.
Abbildung 1. Der Schnellbefehl zum Speichern und Schließen
Wenn Sie sich den XML-Code ansehen, stellen Sie fest, dass durch die insertAfterMso="FileSaveAs"-Attributzuweisung die benutzerdefinierte Schaltfläche direkt nach dem Befehl Speichern unter eingefügt wird. Beachten Sie die Einfügung des kaufmännischen Und-Zeichens (&) in die Beschriftung mithilfe von zwei verketteten &&-Token.
<button id="saveBtn" label="Save && Close" imageMso="SourceControlCheckIn" keytip="Z" onAction="SaveAction" insertAfterMso="FileSaveAs" isDefinitive="true" />
Das onAction-Attribut zeigt auf einen Rückruf, der die Save-Methode der aktiven Arbeitsmappe zum Speichern der Arbeitsmappe verwendet.
Sub SaveAction(control As IRibbonControl)
'Saves any changes to the workbook.
ActiveWorkbook.Save
End Sub
Erstellen der drei Typen von Spaltenlayouts in der Backstage-Ansicht
In der Backstage-Ansicht stehen Ihnen drei Optionen beim Hinzufügen von benutzerdefiniertem Inhalt zur Verfügung. Sie können eine einzelne Spalte angeben, indem Sie das <firstColumn>-Element verwenden. Diese Option ist bei einer horizontalen Darstellung von Daten nützlich. Sie können auch zwei Datenspalten angeben, indem Sie die Elemente <firstColumn> und <secondColumn> verwenden. Diese Option wird am häufigsten verwendet. Und schließlich können Sie eine zusätzliche Unternavigation erstellen, indem Sie das taskFormGroup-Steuerelement verwenden. Sie können z. B. auf verschiedene Steuerelemente in der ersten Spalte klicken, und in dem Bereich daneben werden verschiedene Gruppen angezeigt.
Ein Layout mit einer Spalte wird durch Verwendung des <firstColumn>-Elements wie in Abbildung 2 dargestellt erstellt.
Abbildung 2. Ein Beispiel für ein Layout mit einer Spalte
<firstColumn>
<group id="reviewersGroup" label="Document Reviewers">
<topItems>
<layoutContainer id="headerLayout" layoutChildren="horizontal">
<labelControl id="spacerLabel" label=" " />
<labelControl id="nameHeaderLabel" label=" NAME" />
<labelControl id="titleHeaderLabel" label=" TITLE " />
<labelControl id="roleHeaderLabel" label=" ROLE" />
<labelControl id="approvalDueDateLabel" label=" APPROVAL DUE DATE" />
</layoutContainer>
<layoutContainer id="arthurLayout" layoutChildren="horizontal">
<imageControl id="arthurImage" image="Arthur" />
<labelControl id="arthurNameLabel" label=" Arthur Davis" />
<labelControl id="arthurTitleLabel" label=" Corporate VP" />
<labelControl id="arthurRoleLabel" label=" Final Approver" />
<labelControl id="arthurDueDateLabel" label=" 10/20/2009" />
</layoutContainer>
</topItems>
</firstColumn>
Im nächsten XML-Segment werden die Elemente <firstColumn> und <secondColumn> zum Definieren von zwei Datenspalten wie in Abbildung 3 dargestellt verwendet.
Abbildung 3. Ein Beispiel für ein Layout mit zwei Spalten
<firstColumn>
…<group id="customPrinter" label="PR-XYZ Printer" insertAfterMso="GroupPrintSettings" >
<primaryItem>
<button id="setPaperType" label="Set Paper Type" imageMso="PrintAreaMenu" />
</primaryItem>
<topItems>
<button id="setPlotStart" label="Set Plot Start " imageMso="ChartDepthAxis" />
<button id="setPlotXAxis" label="Set X-Axis Limits" imageMso="ChartSecondaryHorizontalAxis" />
<button id="setPlotYAxis" label="Set Y-Axis Limits" imageMso="ChartSecondaryVerticalAxis" />
</topItems>
…</group>
</firstColumn>
<secondColumn>
<taskGroup id="bidProcessTaskGroup" label="Contract Bid Process Checklist" >
<category id="defineWorkScopeCategory" getLabel="GetCatHelperText" >
<task id="defineScope" label="Define the Scope of Work." tag="Work scope" imageMso="_1" onAction="GetCalcCostCatVisibility"/>
<task id="assignTasks" label="Assign the Tasks" tag="Task assignments" imageMso="_2" onAction="GetCalcCostCatVisibility"/>
</category>
</secondColumn>
Mit dem taskFormGroup-Steuerelement können Sie Gruppen basierend auf einer Auswahl im Steuerelement anzeigen. Vom Steuerelement werden Aufgaben innerhalb von Kategorien zum Speichern der Gruppendefinitionen verwendet. Wenn Sie im taskFormGroup-Steuerelement auf eine Aufgabe klicken, wird die innerhalb des <task>-Elements definierte Gruppe (bzw. Gruppen) im Bereich neben dem Aufgabensteuerelement angezeigt. Die Abbildungen 4 und 5 enthalten Beispiele für die Verwendung des taskFormGroup-Steuerelements, das im folgenden XML-Markup beschrieben ist.
Abbildung 4. Bei Auswahl der ersten Gruppe wird eine Gruppe auf der rechten Seite angezeigt
Abbildung 5. Bei Auswahl der nächsten Gruppe wird eine andere Gruppe auf der rechten Seite angezeigt
Im folgenden XML-Markup wird die Verwendung des taskFormGroup-Steuerelements gezeigt.
<tab id="teamTasksTab" label="Team Tasks" >
<firstColumn>
<taskFormGroup id="teamTaskFormGroup">
<category id="engineeringTeamCategory" label="Engineering Tasks">
<task id="engineeringTeamTasks" label="Manager: William Rodgers" description="Engineering Excellance" imageMso="TableDesign">
<group id="engineeringTeamTasksGroup" label="Engineering Group">
<topItems>
<button id="concept" label="Concept " tag="Task One" imageMso="_1" />
<button id="design" label="Design " tag="Task Two" imageMso="_2" />
<button id="prototype" label="Prototype " tag="Task Three" imageMso="_3" />
<button id="production" label="Production" tag="Task Four" imageMso="_4" />
</topItems>
</group >
</task>
</category>
<category id="manufacturingTeamCategory" label="Manufacturing Tasks">
<task id="manufacturingTeamTasks" label="Manager: Alice Morton" description="Right the First Time" imageMso="ControlsGallery">
<group id="manufacturingTeamTasksGroup" label="Manufacturing Group">
<topItems>
<button id="flowDesign" label="Flow Design " tag="Task One" imageMso="_1" />
<button id="tooling" label="Tooling " tag="Task Two" imageMso="_2" />
<button id="staffing" label="Staffing " tag="Task Three" imageMso="_3" />
<button id="manufacturing" label="Manufacturing" tag="Task Four" imageMso="_4" />
</topItems>
</group >
</task>
</category>
<category id="marketingTeamCategory" label="Marketing Tasks">
<task id="marketingTeamTasks" label="Manager: Jane Burns" description="Bringing Quality to the Customer" imageMso="SignatureShow">
<group id="marketingTeamTasksGroup" label="Marketing Group">
<topItems>
<button id="concepts" label="Concepts " tag="Task One" imageMso="_1" />
<button id="storyBoarding" label="Story Boarding " tag="Task Two" imageMso="_2" />
<button id="finalization" label="Finalization " tag="Task Three" imageMso="_3" />
<button id="channelSelection" label="Channel Selection " tag="Task Four" imageMso="_4" />
<button id="execution" label="Execution " tag="Task Five" imageMso="_5" />
</topItems>
</group >
</task>
</category>
</taskFormGroup >
</firstColumn>
</tab>
Wenn Sie auf die engineeringTeamTasks-Aufgabe in der ersten Spalte klicken, wird die engineeringTeamTasksGroup-Gruppe in dem Bereich neben der ersten Spalte angezeigt. Wenn Sie auf die manufacturingTeamTasks-Aufgabe in Spalte 1 klicken, ersetzt die manufacturingTeamTasksGroup-Gruppe die engineeringTeamTasksGroup-Gruppe auf der rechten Seite der Spalte. Daher wechselt bei Auswahl eines anderen Aufgabensteuerelements die Anzeige von mindestens einer Gruppe neben dieser Spalte. Dadurch können Sie in einem kleineren Bereich mehr Informationen anzeigen.
Einfügen einer benutzerdefinierten Gruppe auf einer integrierten Registerkarte
Das Einfügen einer Gruppe auf einer integrierten Registerkarte funktioniert ähnlich wie das Einfügen einer Gruppe auf einer Registerkarte des Menübands. Sie verweisen auf die integrierte Registerkarte, indem Sie das idMso-Attribut verwenden (jedes Attribut mit dem Mso-Suffix verweist auf ein integriertes Steuerelement oder Bild). Verwenden Sie zum Einfügen der benutzerdefinierten Gruppe nach einem integrierten Steuerelement das insertAfterMso-Attribut. Im folgenden Beispiel fügen Sie eine benutzerdefinierte Gruppe customPrinter nach der integrierten Gruppe GroupPrintSettings auf der integrierten Registerkarte Print ein.
<tab idMso="TabPrint">
<firstColumn>
<group id="customPrinter" label="PR-XYZ Printer" insertAfterMso="GroupPrintSettings" >
<primaryItem>
<button id="setPaperType" label="Set Paper Type" imageMso="PrintAreaMenu" />
</primaryItem>
<topItems>
<button id="setPlotStart" label="Set Plot Start " imageMso="ChartDepthAxis" />
<button id="setPlotXAxis" label="Set X-Axis Limits" imageMso="ChartSecondaryHorizontalAxis" />
<button id="setPlotYAxis" label="Set Y-Axis Limits" imageMso="ChartSecondaryVerticalAxis" />
</topItems>
</group>
</firstColumn>
</tab>
Bei Verwendung dieses XML-Markups wird das in Abbildung 6 gezeigte Ergebnis erzielt.
Abbildung 6. Die benutzerdefinierte Druckergruppe wird der Registerkarte "Print" hinzugefügt
Benutzerdefinierte Gruppen können auch Aufgaben innerhalb von integrierten Registerkarten hinzugefügt werden. In Abbildung 7 wird das Hinzufügen einer benutzerdefinierten Gruppe zu einer integrierten Aufgabe gezeigt, und im dieser Abbildung folgenden XML-Markup wird gezeigt, wie dieses Verfahren ausgeführt wird.
Abbildung 7. Das Ergebnis der Hinzufügung einer benutzerdefinierten Gruppe zu einer integrierten Aufgabe
<taskFormGroup idMso="GroupShare">
<category idMso="Share">
<task idMso="SendUsingEmail">
<group id="sendViaHotmailGroup" insertAfterMso="GroupSendAsLink" label=" ">
<bottomItems>
<layoutContainer id="hotmailItemsLayout" layoutChildren="horizontal">
<button id="sendViaHotmail" style="large" label="Send via Hotmail" image="WindowsLive32"/>
<layoutContainer id="hotmailLabelAndBulletsLayout" layoutChildren="vertical">
<labelControl id="hotmailLabel" label="Use your Hotmail account to send this document."/>
<layoutContainer id="BillboardHotmailRowOne" layoutChildren="horizontal">
<imageControl id="BillboardHotmailRowOneBullet" image="BillboardBullet"/>
<labelControl id="BillboardHotmailRowOneLabel" label="Choose from your list of Hotmail contacts."/>
</layoutContainer>
<layoutContainer id="BillboardHotmailRowTwo" layoutChildren="horizontal">
<imageControl id="BillboardHotmailRowTwpBullet" image="BillboardBullet"/>
<labelControl id="BillboardHotmailRowTwpLabel" label="Recipients get the document from your Windows Live Hotmail address."/>
</layoutContainer>
</layoutContainer>
</layoutContainer>
</bottomItems>
</group>
</task>
</category>
</taskFormGroup>
Einfügen einer benutzerdefinierten Aufgabe auf einer integrierten Registerkarte
Im folgenden Beispiel wird das taskFormGroup-Steuerelement auf der integrierten Registerkarte Share eingefügt. Der integrierten SendUsingEmail-Aufgabe wird eine Gruppe hinzugefügt. Verschiedene Steuerelemente werden auf der Registerkarte ausgerichtet, indem geschachtelte layoutContainer-Steuerelemente verwendet werden.
Hinweis
In diesem Beispiel wird auch eine Methode zum Abrufen der Textaufzählung gezeigt, die in mehreren integrierten Gruppen verwendet wird. Dies geschieht durch die Positionierung eines benutzerdefinierten Bilds, das die Textaufzählung neben der Beschriftung darstellt.
Die folgende Abbildung und das folgende Beispiel ähneln dem vorherigen Beispiel. Hier wird eine weitere Möglichkeit für das Layout von Steuerelementen gezeigt, die von einem taskFormGroup-Steuerelement angezeigt werden. Hier wird die Textaufzählung definiert und anschließend eine Schaltfläche verwendet.
Abbildung 8. Ein weiteres Beispiel für das Layout von Steuerelementen
<task id="ButtonTaskSaveToFacebook" insertAfterMso="SendUsingEmail" label="Post to Facebook" imageMso="HelpContactMicrosoft">
<group id="GroupSaveToFacebook" label="Post to Facebook">
<topItems>
<labelControl id="BillboardFacebookRowOne" label="Post to Facebook to make this document available to all of your friends."/>
<layoutContainer id="BillboardFacebookRowTwo" layoutChildren="horizontal">
<imageControl id="BillboardFacebookRowTwoBullet" getImage="GetBillboardBullet"/>
<labelControl id="BillboardFacebookRowTwoLabel" label="Use a Web browser to view and edit documents from anywhere."/>
</layoutContainer>
<layoutContainer id="BillboardFacebookRowThree" layoutChildren="horizontal">
<imageControl id="BillboardFacebookRowThreeBullet" getImage="GetBillboardBullet"/>
<labelControl id="BillboardFacebookRowThreeLabel" label="Receive notifications when documents change."/>
</layoutContainer>
<button id="ButtonSignIn" style="large" label="Sign in" imageMso="HelpContactMicrosoft"/>
</topItems>
</group>
</task>
Dynamisches Ändern der Sichtbarkeit von Gruppen
Im folgenden Beispiel wird das dynamische Ändern der Sichtbarkeit von zwei Gruppen gezeigt, sodass es den Anschein hat, dass von der Anzeige der einen Gruppe zur anderen Gruppe gewechselt wird. Dies ist hilfreich, wenn die beiden Gruppen sich gegenseitig ausschließen. Das Ergebnis des Wechsels ist in den Abbildungen 9 und 10 dargestellt.
Abbildung 9. Die "Marketing"-Gruppe wird zunächst angezeigt
Abbildung 10. Die Sichtbarkeit der Gruppen wurde zur Anzeige der "Engineering"-Gruppe geändert
Das XML besteht aus einem primaryItem-Steuerelement mit einer Menügruppe mit zwei Schaltflächen. Durch Klicken auf die erste Schaltfläche beginnt der Wechsel. Die marketingGroupDetails-Gruppe und die engineeringGroupDetails-Gruppe sind von dem Wechsel betroffen.
<primaryItem>
<menu id="switchMenu" label="Groups" imageMso="ControlLayoutStacked" >
<menuGroup id="switchMenuGroup">
<button id="switchGroups" label="Switch for Group Status" onAction="SwitchGroupsBtn"/>
</menuGroup>
</menu>
</primaryItem>
<group id="marketingGroupDetails" label="Marketing Group" getVisible="GetMarketingGroupVisibility">
<primaryItem>
<button id="marketingButton" label="Marketing" imageMso="OutlookGlobe" />
</primaryItem>
<topItems>
<editBox id="marketingManager" label=" Manager: " getText="GetMarketingDetail"/>
<editBox id="marketingBudget" label=" Budget: " getText="GetMarketingDetail"/>
<editBox id="marketingEndDate" getText="GetMarketingDetail" label="Completion Date: "/>
</topItems>
</group>
<group id="engineeringGroupDetails" label="Engineering Group" getVisible="GetEngineeringGroupVisibility" >
<primaryItem>
<button id="engineeringButton" label="Engineering" imageMso="TableDesign" />
</primaryItem>
<topItems>
<editBox id="engineeringManager" label=" Manager: " getText="GetEngineeringDetail"/>
<editBox id="engineeringBudget" label=" Budget: " getText="GetEngineeringDetail"/>
<editBox id="engineeringEndDate" getText="GetEngineeringDetail" label="Completion Date: "/>
<layoutContainer id="hyperlinkLayout" layoutChildren="horizontal" >
<labelControl id="hyperlinkLabel" label=" Check Parts Availability:" />
<hyperlink id="checkPartsHyperlink" label="https://www.microsoft.com" getTarget="GetHyperLink"/>
</layoutContainer>
</topItems>
</group>
Sub SwitchGroupsBtn(control As IRibbonControl)
engGrpVisible = Not engGrpVisible
If (engGrpVisible = False) Then
mrktGrpVisible = True
Else
mrktGrpVisible = False
End If
processRibbon.Invalidate
End Sub
XML und VBA-Code arbeiten wie folgt zusammen:
Wenn Sie auf die Schaltfläche klicken, wird der onAction="SwitchGroupsBtn"-Rückruf ausgelöst.
Die SwitchGroupsBtn-Subroutine legt die Variable engGrpVisible auf den Gegenwert fest. Zunächst ist diese Variable auf True festgelegt, sodass die engineeringGroupDetails-Gruppe angezeigt wird, wenn die Registerkarte Contoso Process zuerst angezeigt wird.
Dann wird der Wert der Variablen engGrpVisible überprüft, und abhängig vom Wert wird die Variable mrktGrpVisible auf den Gegenwert festgelegt. Dies bedeutet, dass beim Zurücksetzen der Benutzeroberfläche (beim Ausführen der processRibbon.Invalidate-Methode) durch die Variable, die auf True festgelegt ist, bestimmt wird, welche Gruppe angezeigt wird.
Sub GetMarketingGroupVisibility(control As IRibbonControl, ByRef returnedVal) returnedVal = engGrpVisible End Sub Sub GetEngineeringGroupVisibility(control As IRibbonControl, ByRef returnedVal) returnedVal = mrktGrpVisible End Sub
Beim Zurücksetzen der Benutzeroberfläche werden die Attribute getVisible="GetMarketingGroupVisibility" und getVisible="GetEngineeringGroupVisibility" ausgelöst. Da die Werte die jeweiligen Gegenwerte des anderen darstellen, wird durch den Wert, der gleich True ist, die Sichtbarkeit der entsprechenden Gruppe bestimmt.
Angeben des Layouts von Steuerelementen
Mit dem layoutContainer-Steuerelement können Sie die horizontale oder vertikale Ausrichtung der darin enthaltenen Steuerelemente angeben. Legen Sie hierzu den Wert des layoutChildren-Attributs auf vertical oder auf horizontal fest.
Abbildung 11. Ein Beispiel für das vertikale und horizontale Steuerelementlayout
Mit dem folgenden XML werden die in Abbildung 11 dargestellten horizontalen und vertikalen Steuerelemente erstellt.
<layoutContainer id="specDetails" layoutChildren="vertical">
<editBox id="specTitle" label="Title: " getText="GetSpecDetailText" />
<editBox id="specDesigner" label="Designer: " getText="GetSpecDetailText" />
<editBox id="specEngineer" label="Engineer: " getText="GetSpecDetailText" />
<editBox id="specTeam" label="Team: " getText="GetSpecDetailText"/>
<editBox id="specCost" label="Cost: " getText="GetSpecDetailText"/>
</layoutContainer>
<layoutContainer id="getSpecDetailsControls" layoutChildren="horizontal">
<button id="getCostBasis" label="Get Cost Basis Info" screentip="Display Cost Basis List" />
<button id="getCostCodes" label="Get Cost Codes" screentip="Display Cost Code List"/>
<button id="getTeamCodes" label="Get Team Codes" screentip="Display Team Code List"/>
</layoutContainer>
Dynamisches Festlegen des Formats eines Steuerelements zum Hervorheben seines Status
Es kann Situationen geben, in denen Sie die Aufmerksamkeit auf der Grundlage einer angegebenen Bedingung auf eine bestimmte Gruppe lenken möchten. Mithilfe des getStyle-Attributs können Sie ein Format aus einer der Enumerationen des BackstageGroupStyle-Objekts zurückgeben (dies wurde im vorherigen Abschnitt erläutert).
Abbildung 12. Ein Beispiel für eine Gruppe mit dem "BackstageGroupStyleError"-Format zur Hervorhebung
<group id="openDesignIssuesGroup" label="Open Design Issues" getStyle="GetIssuesStyle" getHelperText="GetIssuesHelperText" >
<primaryItem>
<button id="resolveIssuesButton" label="Click to Resolve" imageMso="AcceptInvitation" onAction="ResolveIssues" />
</primaryItem>
<topItems>
<labelControl id="delayIssue" label="Issue: Delay in Material Delivery" getVisible="getIssueVisibility" />
<labelControl id="equipmentDownIssue" label="Issue: Equipment Down Time" getVisible="getIssueVisibility" />
<labelControl id="laborDisputeIssue" label="Issue: Labor Dispute" getVisible="getIssueVisibility" />
</topItems>
</group>
Sub GetIssuesStyle(control As IRibbonControl, ByRef returnedVal)
If (Not issueResolved) Then
returnedVal = BackstageGroupStyle.BackstageGroupStyleError
Else
returnedVal = BackstageGroupStyle.BackstageGroupStyleNormal
End If
End Sub
Sub ResolveIssues(control As IRibbonControl)
issueResolved = True
issueVisibility = False
processRibbon.Invalidate
End Sub
Sub getIssueVisibility(control As IRibbonControl, ByRef returnedVal)
returnedVal = issueVisibility
End Sub
Die Kombination aus XML und VBA funktioniert wie folgt:
Der Bereich um die openDesignIssuesGroup-Gruppe wird zunächst in Rot (BackstageGroupStyle.BackstageGroupStyleError) angezeigt, da die Variable issueResolved auf False festgelegt ist. Zudem ist die Variable issueVisibility auf True festgelegt, sodass der Text für alle labelControls-Steuerelemente angezeigt wird. Wenn Sie auf die Schaltfläche primaryItem klicken, wird dadurch die ResolveIssues-Rückrufprozedur ausgelöst.
Mit dieser Aktion wird die Variable issueResolved auf True und die Variable issueVisiblity auf False festgelegt. Die Benutzeroberfläche wird dann mithilfe der processRibbon.Invalidate-Methode zurückgesetzt, die wiederum den ResolveIssues-Rückruf auslöst.
Diesmal besitzt die Variable issueResolved den Wert True, wodurch der BackstageGroupStyle.BackstageGroupStyleNormal-Wert an Office zurückgegeben wird. Dadurch wechselt der Bereich um die Gruppe auf den Standardwert, mit dem kein Farbwert angegeben wird.
Wenn darüber hinaus die ResolveIssues-Rückrufprozedur erneut aufgerufen wird, wird die Variable issueVisiblity mit dem Wert False von der getIssueVisibility-Prozedur zurückgegeben. Dadurch wird der Text in den labelControls-Steuerelementen ausgeblendet.
Synchronisieren der Sichtbarkeit einer Gruppe von Steuerelementen mit einer anderen Gruppe von Steuerelementen
In einigen Situationen möchten Sie vielleicht die Sichtbarkeit einer Gruppe von Steuerelementen in einem anderen Teil der Backstage-Ansicht steuern. Sie möchten z. B. erst dann ein Unterschriftstextfeld anzeigen, wenn andere Aufgaben abgeschlossen wurden. Im folgenden Beispiel müssen Sie zwei Aufgaben beenden (angegeben durch Klicken auf die Schaltflächen in diesen Aufgaben), bevor eine andere Gruppe von Aufgaben angezeigt wird. Durch Abschluss dieser zweiten Gruppe von Aufgaben wird dann die Anzeige anderer Steuerelemente ausgelöst. Bei dieser Aktion entsteht ein Weitergabeeffekt wie in den Abbildungen 13 und 14 gezeigt.
Abbildung 13. Die ersten beiden Aufgaben werden angezeigt
Abbildung 14. Durch den Abschluss der ersten beiden Aufgaben wird die Anzeige anderer Aufgaben ausgelöst
<taskGroup id="bidProcessTaskGroup" label="Contract Bid Process Checklist" >
<category id="defineWorkScopeCategory" getLabel="GetCatHelperText" >
<task id="defineScope" label="Define the Scope of Work." tag="Work scope" imageMso="_1" onAction="GetCalcCostCatVisibility"/>
<task id="assignTasks" label="Assign the Tasks" tag="Task assignments" imageMso="_2" onAction="GetCalcCostCatVisibility"/>
</category>
<category id="calculateCostsCategory" getLabel="GetCatHelperText" getVisible="GetCatVisibility" >
<task id="calcManHours" label="Calculate Total Man-Hours" tag="Calculate Man-Hours" imageMso="_3" onAction="GetTaskCompleteVisibility"/>
<task id="calcOverheadCosts" label="Determine Overhead Costs" tag="Calculate Overhead Costs" imageMso="_4" onAction="GetTaskCompleteVisibility"/>
</category>
</taskGroup>
<group id="tasksCompleteImageGroup" >
<topItems>
<layoutContainer id="taskCompleteImageLayout" layoutChildren="horizontal" >
<imageControl id="checkMarkImage" imageMso="AcceptInvitation" getVisible="GetTaskCompleteImageVisibility"/>
<labelControl id="completionLabel" label="The proposal is ready for review." getVisible="GetTaskCompleteImageVisibility" />
</layoutContainer>
</topItems>
</group>
Sub GetCalcCostCatVisibility(control As IRibbonControl)
If (control.ID = "defineScope") Then
taskOneComplete = True
If (taskOneComplete And taskTwoComplete) Then
catTwoVisible = True
processRibbon.InvalidateControl ("calculateCostsCategory")
End If
Else
taskTwoComplete = True
If (taskOneComplete And taskTwoComplete) Then
catTwoVisible = True
processRibbon.InvalidateControl ("calculateCostsCategory")
End If
End If
End Sub
Primär wird in diesem Beispiel ein taskGroup-Steuerelement verwendet, das aus Kategorien von Aufgaben besteht. Durch den Abschluss einer Kategorie mit Aufgaben, was durch eine Abfolge von Klicken auf die Aufgabensteuerelemente erzielt wird, wird eine andere Kategorie mit Aufgaben sichtbar. Wenn diese Aufgaben nacheinander beendet werden, werden ein imageControl-Steuerelement und ein labelControl-Steuerelement sichtbar, wodurch signalisiert wird, dass alle Aufgaben abgeschlossen wurden.
Diese Aktion wird wie folgt ausgeführt:
Bei Initialisierung der Registerkarte ist die defineWorkScopeCategory-Kategorie des bidProcessTaskGrouptaskGroup-Steuerelements sichtbar. Die beiden darin enthaltenen Aufgabensteuerelemente sind ebenfalls sichtbar. Wenn Sie auf das defineScope-Aufgabensteuerelement klicken, wird die GetCalcCostCatVisibility-Rückrufprozedur aufgerufen.
Die GetCalcCostCatVisibility-Prozedur legt die Variable taskOneComplete auf True fest. Dann wird überprüft, ob die Variable taskOneComplete und die Variable taskTwoComplete den Wert True besitzen. Da die Variable taskTwoComplete nicht auf True festgelegt ist, wird die Schleife nicht beendet.
Wenn Sie dann auf das assignTasks-Aufgabensteuerelement klicken, wird die GetCalcCostCatVisibility-Prozedur wieder aufgerufen, und der Else-Teil der If Then-Anweisung wird getestet. Als erstes wird die Variable taskTwoComplete auf True festgelegt. Wenn nun die Variablen taskOneComplete und taskTwoComplete getestet werden, sind beide auf True festgelegt, sodass die Variable catTwoVisible auf True festgelegt wird. Dann wird das calculateCostsCategory-Kategoriesteuerelement zurückgesetzt, wodurch sein GetCatVisibility-Rückruf ausgelöst wird.
Von dieser Subroutine wird die Variable catTwoVisible zurückgegeben, die zuvor auf True festgelegt wurde, sodass die Kategorie angezeigt wird. Wenn Sie auf die calcManHours-Aufgabe klicken, wird der Prozess erneut gestartet, dieses Mal jedoch für die Aufgaben in der calculateCostsCategory-Kategorie. Der einzige Unterschied liegt darin, dass nicht eine andere Kategorie angezeigt wird, wenn beide Aufgaben beendet sind, sondern es werden die beiden Steuerelemente checkMarkImageimageControl und completionLabellabelControl angezeigt. Dadurch wird signalisiert, dass alle Aufgaben beendet wurden.
Schlussbemerkung
Die in diesem Artikel gezeigten Beispiele stellen Szenarien dar, die in der Backstage-Ansicht ausgeführt werden können. Die beim Definieren der Benutzeroberfläche und Sicherstellen ihrer Funktionalität verwendeten Techniken sind vom Konzept her für Menüband und Backstage-Ansicht identisch. Ich möchte Sie zu weiteren Anpassungen der Benutzeroberfläche ermutigen, sodass Sie erkennen können, wie Sie nützliche Anwendungen in Ihrer Organisation erstellen können.
Weitere Ressourcen
Weitere Informationen zu den in diesem Artikel erläuterten Themen finden Sie in den folgenden Ressourcen:
Einführung in die Office 2010-Backstage-Ansicht für Entwickler
Anpassen der Menüband-Benutzeroberfläche von Office (2007) für Entwickler
Download: Office 2010-Referenz: XML-Schema für die Office Fluent-Benutzeroberfläche
Besonderer Dank gilt meiner Lektorin Linda Cannon für ihre Unterstützung bei diesem Artikel.