Konfigurera om menyfliksområdet med programlägen
Windows Ribbon-ramverket stöder dynamisk omkonfiguration och exponering av kärnelement i menyfliksområdets användargränssnitt vid körning, baserat på programmets tillstånd (kallas även kontext). Deklarerade och associerade med specifika element i markering kallas de olika tillstånd som stöds av ett program för programlägen.
- Introduktion
- kontextuellt användargränssnitt
- Implementera applikationslägen
- kommentarer
- Relaterade ämnen
Introduktion
Programlägen består av logiska grupper av kontroller som exponerar vissa grundläggande programfunktioner i menyfliksområdets användargränssnitt. Dessa lägen aktiveras eller inaktiveras dynamiskt av programmet via ett anrop till ramverksmetoden IUIFramework::SetModes, vilket aktiverar eller inaktiverar synligheten för ett eller flera programlägen.
Kontextuellt användargränssnitt
Ribbon-ramverket ger omfattande användarupplevelse genom att införliva dynamiska kontroller som svarar sömlöst på användarinteraktion och programkontext. Det här omfattande kontextuella användargränssnittet levereras via en kombination av följande mekanismer:
- Gallerier – samlingsbaserade kontroller som stöder dynamisk manipulering av deras objektsamlingar.
- Sammanhangsberoende flikar – menyflikar som har sin synlighet bestämd av en ändring i arbetsytekontexten, till exempel valet av en bild i ett dokument.
- Programlägen – grundläggande programfunktioner som är beroende av programkontext.
I vissa avseenden ser programlägena funktionellt ut ungefär som sammanhangsbaserade flikar. Den grundläggande skillnaden ligger dock i avsikten och omfattningen för var och en.
Sammanhangsbaserade kontroller aktiveras som svar på en ändring av kontexten i ett program. I Microsoft Paint för Windows 7 visas till exempel en sammanhangsbaserad flik som innehåller grupper med textrelaterade kommandon när en användare infogar ett textområde i arbetsytan. Den här sammanhangsberoende fliken innehåller inte kärnkommandon för programmet och exponeras endast i användargränssnittet eftersom kontexten inom programmet har ändrats. Programmets kärnfunktioner (bildredigeringskommandona) är fortfarande relevanta och tillgängliga för användaren, även med den sammanhangsbaserade fliken synlig.
Programlägen skiljer sig från sammanhangsbaserade kontroller eftersom de konfigurerar om funktioner som svar på ändringar i den kontext som programmet körs i. Programlägen ligger på en högre abstraktionsnivå. de ger ett sätt att konfigurera om kärnfunktionerna i ett program i stället för att tillfälligt exponera funktioner som inte är en kärnkomponent i användargränssnittet. I Microsoft Paint för Windows 7 inträffar till exempel en växel i programläge när kommandot Print preview anropas. När Microsoft Paint växlar till Förhandsgranskningändras kontexten i vilken programmet arbetar från redigering till förhandsgranskning. Därför ändras applikationens kärnfunktionalitet tills Förhandsgranskning avbryts och applikationen går in i redigeringskontexten igen.
Ett enkelt scenario för programläge
Följande scenario visar hur programlägen används i ett program som kallas RibbonApp för att exponera diskreta aspekter av kärnfunktioner.
Två programlägen definieras i RibbonApp:
- Enkelt-läge exponerar grundläggande kommandon i menyfliksområdets användargränssnitt. Dessa kommandon visas hela tiden, oavsett vilket programläge som är aktivt.
- Avancerat-läge exponerar komplexa kommandon som är avsedda för expertanvändare av programmet. Dessa avancerade kommandon visas i hela menyfliksområdets användargränssnitt, förutom de enkla kommandona.
Som standard är RibbonApp inställt på att öppnas i enkelt läge, och kommandona som krävs av nybörjare visas i programmenyn och fliken Start. Följande skärmdumpar visar menyfliken RibbonApp Programmeny och Start i enkelt läge, vilket markerar de modala kontrollerna.
Även om dessa kommandon kan vara tillräckliga för nybörjare, stöder RibbonApp även expertanvändare via ett Avancerat-läge som, när det aktiveras genom att klicka på knappen Växla till avancerat läge i -programmenyn, visar ytterligare kärnfunktioner.
Det här scenariot implementeras enkelt genom att olika element binds i markering till diskreta programlägen som kan aktiveras och inaktiveras efter behov. Följande skärmbilder visar menyfliken RibbonApp Programmeny och Start i avancerat läge, vilket markerar de modala kontrollerna.
Införande av programlägen
I det här avsnittet beskrivs de tre steg som vanligtvis krävs för implementering av Programlägen för Ribbon Framework. RibbonApp används för att ge ett exempel för varje steg.
Identifiera lägena
Varje läge i ett program ska representera en logisk uppsättning funktioner som är beroende av den kontext som ett program kan arbeta i. Om ett program till exempel visar kontroller som bara är relevanta när en nätverksanslutning identifieras, fungerar dessa kontroller i en nätverkskontext som kan motivera skapandet av ett nätverksläge.
RibbonApp har två kontexter som kan vara aktiva när som helst: Simple och Advanced. Därför kräver RibbonApp två lägen: Simple och Advanced.
Tilldela kontroller till programlägen
När programlägena har identifierats tilldelar du varje menyflikskontroll till ett läge genom att deklarera ett ApplicationModes- attribut i markering för de kontrollelement som stöder programlägen.
I menyfliksområdet kan lägen anges för följande kontrollelement:
Core Tab element.
Gruppera-element som är underordnade grundelement för -fliken.
Button, SplitButtonoch DropDownButton element som tilldelats till en MenuGroup- i -programmenyn.
Not
Button, SplitButtonoch DropDownButton element kan inte tilldelas till ett läge om de inte finns i -programmenyn.
I menyfliksområdet kallas dessa kontrollelement för modala kontroller. De visas bara om ett läge som de är bundna till är aktivt i användargränssnittet.
Kontrollelement som finns i en modal kontroll ärver beteendet för programläge. Om till exempel en grupp modal kontroll har tilldelats till ett avancerat läge och det avancerade läget inte är aktivt, kommer den grupp och eventuella kontroller i den, modala eller på annat sätt, inte att visas i menyfliksområdet i användargränssnittet.
Med hjälp av attributet ApplicationModes tilldelas lägen till modala kontroller i en 1:N-relation (en-till-många), där en enda modal kontroll kan associeras med flera lägen.
Menyfliksområdet refererar till lägen numeriskt, från 0 till 31, med läge 0 som anses vara standardläget som aktiveras automatiskt när en menyfliksapplikation startar. Alla modala kontroller som inte anger ett ApplicationModes-attribut anses vara medlemmar i standardläget.
I RibbonApp är Simple standardläget, där funktionen Avancerat läge endast visas när den initieras av användaren.
I följande exempel visas den markering som krävs för RibbonApp.
<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>
Det här exemplet visar följande:
- Standardläge 0 behöver inte deklareras explicit. Eftersom modala kontroller som inte anger attributet ApplicationModes automatiskt är bundna till läge 0 (enkelt läge i RibbonApp-exemplet) behöver du inte uttryckligen deklarera attributet för standardmodala kontroller.
- Kontroller kan bindas till flera lägen. För RibbonApp är det enda behovet av attributet ApplicationModes i en enkel-lägeskontroll knappen
cmdSwitchModes
, eftersom den är en del av både enkla och avancerade lägen. Om något av lägena är aktivt visas den här kontrollen i -programmenyn. - Modala kontroller ärver inte från sina föräldrar. Fliken Avancerat i RibbonApp innehåller en grupp Metadata; båda dessa modala kontroller är tilldelade till läge 1 (Avancerat läge). När du tilldelar fliken Avancerat till läge 1 tilldelas inte automatiskt underordnade kontroller, till exempel gruppen metadata, till läge 1. På så sätt kan alla grupper på en flik vara oberoende aktiverade eller inaktiverade vid körning.
- Icke-modala kontroller kan fortfarande förlita sig på lägesväxlar. Knapparna Redigera metadata och Sök efter fel i RibbonApp är endast tillgängliga för avancerade användare när användaren växlar till avancerat läge. Knappkontroller som inte värds i -applikationsmenyn är icke-modala; men eftersom dessa knappar värds i en modal kontroll (gruppen Metadata) är de synliga när gruppen är synlig. Därför visas dessa knappar när avancerat läge aktiveras och gruppen Metadata visas i menyfliksområdets användargränssnitt.
Växla lägen vid körning
När lägena har definierats i markering kan de enkelt aktiveras eller inaktiveras som svar på kontextuella händelser. Som tidigare nämnts startar bandprogram alltid i standardläge 0. När programmet har initierats och läge 0 är aktivt kan uppsättningen aktiva lägen ändras genom att anropa funktionen IUIFramework::SetModes. Den här funktionen tar ett 32-bitars heltal som en bitvis representation av de lägen som ska vara aktiva. den minst signifikanta biten representerar läge 0 och den viktigaste biten representerar läge 31. Om en bit är inställd på noll är läget inte aktivt i menyfliksområdets användargränssnitt.
När en användare aktiverar avancerat läge i RibbonApp visas de avancerade kommandona tillsammans med de enkla kommandona. Kommandohanteraren för knappen Växla till avancerat läge anropar IUIFramework::SetModes för att ange lägen 0 (Simple) och 1 (Advanced) som aktiva i användargränssnittet. Följande exempel är RibbonApp-koden för det här funktionsanropet :
const int SIMPLE_MODE = 0;
const int ADVANCED_MODE = 1;
pFramework->SetModes( UI_MAKEAPPMODE(SIMPLE_MODE) | UI_MAKEAPPMODE(ADVANCED_MODE) );
Anteckning
Menyfliksområdet UI_MAKEAPPMODE makro förenklar uppgiften att ange dessa bitar korrekt inför anropet till IUIFramework::SetModes.
Det här exemplet visar följande:
- Använd makrot UI_MAKEAPPMODE för att skapa en lägesuppsättning.
- Lägen anges explicit och atomiskt. Heltalsvärdet som skickas till IUIFramework::SetModes representerar de lägen som ska vara aktiva när funktionen har returnerats. Även om Simple-läget tidigare var aktivt måste IUIFramework::SetModes ange att läget Simple förblir aktivt när läget Avancerat är aktiverat.
- Standardläget kan tas bort. Även om standardläget (läge 0) aldrig tas bort i RibbonApp, kan det tas bort med följande anrop:
g_pFramework->SetModes(UI_MAKEAPPMODE(ADVANCED_MODE))
och exponera endast de avancerade kommandona i användargränssnittet.
Notera
När lägena för ett program konfigureras om försöker menyfliksområdet bevara den tidigare markerade fliken i användargränssnittet. Om den nya uppsättningen lägen inte längre innehåller den fliken som valdes före anropet, kommer menyfliksområdet att välja fliken i layouten som är närmast programmenyn. Den här fliken är avsedd att innehålla de kommandon som är mest relevanta för användaren. Mer information finns i riktlinjerna för användarupplevelse i menyfliksområdet .
Anmärkningar
Menyfliksområdet måste ha minst ett aktivt läge hela tiden. Om ett program försöker inaktivera alla lägen genom att anropa IUIFramework::SetModes med lägesvärdet 0 returneras E_FAIL och den aktiva lägesuppsättningen förblir oförändrad.
Ramverket kräver att det finns minst en flik i menyfliksområdets användargränssnitt hela tiden. Därför måste det finnas minst en flik som exponeras av standardläget (läge 0) och efter varje lägesväxling.
Alla områden i menyfliksområdet påverkas inte av programlägen. Om inaktivering av ett läge leder till att knappar som tidigare lagts till i verktygsfältet Snabbåtkomstförsvinner från menyfliksområdet, kommer dessa knappar fortfarande att finnas kvar i verktygsfältet Snabbåtkomst. Därigenom kan användarna köra de kommandon som är bundna till knapparna. Om ett kommando tillhör ett eller flera inaktiva lägen bör kommandot som en allmän regel också inaktiveras genom att ange egenskapen UI_PKEY_Enabled till 0 (VARIANT_FALSE) .
Relaterade ämnen