Dichiarazione di comandi e controlli con markup della barra multifunzione

Il framework della barra multifunzione di Windows usa un linguaggio di markup basato su Extensible Application Markup Language (XAML) per implementare in modo dichiarativo l'aspetto di un'applicazione della barra multifunzione.

Separazione della presentazione dalla logica dei comandi

La separazione degli attributi di presentazione e oggetti visivi dalla logica di comando nel framework della barra multifunzione viene eseguita tramite due piattaforme di sviluppo distinte, ma dipendenti. I layout di controllo, i comportamenti di ridimensionamento, le dichiarazioni di comando e le specifiche delle risorse sono il dominio del tempo di progettazione di una sintassi di markup dichiarativa in base alla specifica XAML (Extensible Application Markup Language). Le funzionalità di basso livello, gli hook dell'applicazione e i gestori comandi sono definiti nelle implementazioni dell'interfaccia basata su Component Object Model (COM).

Questa separazione della presentazione e della logica offre i vantaggi seguenti:

  • Ciclo di sviluppo di applicazioni più efficiente che consente agli sviluppatori e alle finestre di progettazione dell'interfaccia utente di implementare l'interfaccia utente dell'applicazione multifunzione in modo indipendente dalla funzionalità dell'applicazione principale. Questa funzionalità di base può essere lasciata agli sviluppatori software dedicati.
  • Manutenzione meno costosa perché le modifiche apportate alla GUI sono possibili senza modifiche alle funzionalità di base (e viceversa).
  • Specifica semplice delle risorse stringa e immagine tramite markup.
  • Facilità di prototipazione.

Struttura di markup

Esistono due rami distinti all'interno della struttura del markup del framework della barra multifunzione.

Il primo ramo contiene un manifesto delle dichiarazioni di comando e risorse (stringhe e immagini). Ogni voce di comando viene usata dal framework per associare un controllo barra multifunzione, tramite un ID comando, a un gestore comandi definito nel codice dell'applicazione.

Il secondo ramo contiene le dichiarazioni di controllo effettive. Ogni controllo è associato a un comando tramite un attributo CommandName che esegue il mapping a un attributo Name specificato in ogni dichiarazione command.

Componenti della barra multifunzione

La funzionalità dell'interfaccia utente del framework della barra multifunzione viene esposta tramite Visualizzazioni. Una visualizzazione è essenzialmente un contenitore, ad esempio la barra multifunzione e ContextPopup, usata per presentare i controlli del framework e i comandi a cui sono associati.

La visualizzazione della barra multifunzione è costituita da diversi componenti che includono un menu applicazione, la barra degli strumenti di accesso rapido (QAT) per la visualizzazione di comandi comunemente usati dall'interfaccia utente della barra multifunzione, dalle schede principali e contestuali che contengono gruppi di controlli e dal sistema di menu di scelta rapida completo del contestoPopup.

Tutti i componenti della barra multifunzione vengono dichiarati in un file di markup autonomo che:

I due esempi di markup della barra multifunzione seguenti illustrano come ogni set di voci di menu dell'applicazione della barra multifunzione siano associate a un nome e un ID comando.

  1. Questa sezione mostra le dichiarazioni di comando necessarie per un menu applicazione con comandi di base, ad esempio New, Open e Save.

    <!-- 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. Questa sezione mostra le dichiarazioni di controllo associate.

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

Quando il markup viene compilato con lo strumento UI Command Compiler (UICC), i nomi dei comandi e gli ID vengono inseriti in un file di intestazione usato dall'applicazione host della barra multifunzione.

Di seguito è riportato un esempio di file di intestazione generato da UICC.

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

Compilazione del markup della barra multifunzione