Servizio immagini e catalogo

Questo cookbook contiene indicazioni e procedure consigliate per l'adozione del servizio immagini e del catalogo immagini di Visual Studio introdotti in Visual Studio 2015.

Il servizio immagini introdotto in Visual Studio 2015 consente agli sviluppatori di ottenere le immagini migliori per il dispositivo e il tema scelto dall'utente per visualizzare l'immagine, incluso il tema corretto per il contesto in cui vengono visualizzati. L'adozione del servizio immagini consentirà di eliminare i principali punti critici correlati alla manutenzione degli asset, alla scalabilità HDPI e al tema.

Problemi oggi Soluzioni
Fusione dei colori di sfondo Fusione alfa predefinita
Tema (alcune) immagini Metadati del tema
Modalità contrasto elevato Risorse alternative a contrasto elevato
Sono necessarie più risorse per diverse modalità DPI Risorse selezionabili con fallback basato su vettore
Immagini duplicate Un identificatore per ogni concetto di immagine

Perché adottare il servizio immagini?

  • Ottenere sempre l'immagine "pixel-perfect" più recente da Visual Studio

  • È possibile inviare e usare immagini personalizzate

  • Non è necessario testare le immagini quando Windows aggiunge un nuovo ridimensionamento DPI

  • Risolvere gli ostacoli dell'architettura precedenti nelle implementazioni

    La barra degli strumenti della shell di Visual Studio prima e dopo l'uso del servizio immagini:

    Servizio immagini prima e dopo

Funzionamento

Il servizio immagini può fornire un'immagine bitmap adatta per qualsiasi framework dell'interfaccia utente supportato:

  • WPF: BitmapSource

  • WinForms: System.Drawing.Bitmap

  • Win32: HBITMAP

    Diagramma di flusso del servizio immagini

    Diagramma di flusso del servizio immagini

    Moniker immagine

    Un moniker immagine (o moniker per brevità) è una coppia GUID/ID che identifica in modo univoco un asset immagine o un asset elenco di immagini nella raccolta immagini.

    Moniker noti

    Set di moniker di immagini contenuti nel Catalogo immagini di Visual Studio e utilizzabile pubblicamente da qualsiasi componente o estensione di Visual Studio.

    File manifesto dell'immagine

    I file manifesto dell'immagine (con estensione imagemanifest) sono file XML che definiscono un set di asset di immagine, i moniker che rappresentano tali asset e l'immagine o le immagini reali che rappresentano ogni asset. I manifesti delle immagini possono definire immagini autonome o elenchi di immagini per il supporto dell'interfaccia utente legacy. Sono inoltre disponibili attributi che possono essere impostati sull'asset o sulle singole immagini dietro ogni asset per cambiare quando e come vengono visualizzati tali asset.

    Schema del manifesto dell'immagine

    Un manifesto dell'immagine completo è simile al seguente:

<ImageManifest>
      <!-- zero or one Symbols elements -->
      <Symbols>
        <!-- zero or more Import, Guid, ID, or String elements -->
      </Symbols>
      <!-- zero or one Images elements -->
      <Images>
        <!-- zero or more Image elements -->
      </Images>
      <!-- zero or one ImageLists elements -->
      <ImageLists>
        <!-- zero or more ImageList elements -->
      </ImageLists>
</ImageManifest>

Simboli

Come supporto per la leggibilità e la manutenzione, il manifesto dell'immagine può usare i simboli per i valori degli attributi. I simboli sono definiti come segue:

<Symbols>
      <Import Manifest="manifest" />
      <Guid Name="ShellCommandGuid" Value="8ee4f65d-bab4-4cde-b8e7-ac412abbda8a" />
      <ID Name="cmdidSaveAll" Value="1000" />
      <String Name="AssemblyName" Value="Microsoft.VisualStudio.Shell.UI.Internal" />
</Symbols>
Sottoelemento Definizione
Import Importa i simboli del file manifesto specificato da usare nel manifesto corrente
GUID Il simbolo rappresenta un GUID e deve corrispondere alla formattazione GUID
ID Il simbolo rappresenta un ID e deve essere un numero intero non negativo
String Il simbolo rappresenta un valore stringa arbitrario

I simboli fanno distinzione tra maiuscole e minuscole e fanno riferimento usando la sintassi $(symbol-name):

<Image Guid="$(ShellCommandGuid)" ID="$(cmdidSaveAll)" >
      <Source Uri="/$(AssemblyName);Component/Resources/image.xaml" />
</Image>

Alcuni simboli sono predefiniti per tutti i manifesti. Questi valori possono essere usati nell'attributo Uri dell'elemento <Source> o <Import> per fare riferimento ai percorsi nel computer locale.

Simbolo Descrizione
CommonProgramFiles Valore della variabile di ambiente %CommonProgramFiles%
Localappdata Valore della variabile di ambiente %LocalAppData%
ManifestFolder Cartella contenente il file manifesto
Mydocuments Percorso completo della cartella Documenti dell'utente corrente
ProgramFiles Valore della variabile di ambiente %ProgramFiles%
Sistema Cartella Windows\System32
Windir Valore della variabile di ambiente %WinDir%

Image

L'elemento <Image> definisce un'immagine a cui può fare riferimento un moniker. Il GUID e l'ID combinati formano il moniker dell'immagine. Il moniker per l'immagine deve essere univoco nell'intera libreria di immagini. Se più di un'immagine ha un determinato moniker, il primo rilevato durante la compilazione della libreria è quello conservato.

Deve contenere almeno un'origine. Le origini indipendenti dalle dimensioni offrono i risultati migliori in un'ampia gamma di dimensioni, ma non sono necessarie. Se viene richiesta un'immagine di una dimensione non definita nell'elemento <Image> e non esiste un'origine indipendente dalle dimensioni, il servizio sceglierà l'origine specifica delle dimensioni migliore e la ridimensiona alle dimensioni richieste.

<Image Guid="guid" ID="int" AllowColorInversion="true/false">
      <Source ... />
      <!-- optional additional Source elements -->
</Image>
Attributo Definizione
GUID [Obbligatorio] Parte GUID del moniker dell'immagine
ID [Obbligatorio] Parte ID del moniker dell'immagine
AllowColorInversion [Facoltativo, valore predefinito true] Indica se l'immagine può avere i colori invertibili a livello di codice quando viene usato in uno sfondo scuro.

Origine

L'elemento <Source> definisce un singolo asset di origine immagine (XAML e PNG).

<Source Uri="uri" Background="background">
      <!-- optional NativeResource element -->
 </Source>
Attributo Definizione
URI [Obbligatorio] URI che definisce la posizione da cui è possibile caricare l'immagine. I possibili valori sono i seguenti:

- URI pack che usa l'autorità di application:///
- Informazioni di riferimento sulle risorse dei componenti assoluti
- Percorso di un file contenente una risorsa nativa
Background [Facoltativo] Indica il tipo di sfondo che l'origine deve essere usata.

I possibili valori sono i seguenti:

Luce: la sorgente può essere utilizzata su uno sfondo chiaro.

Scuro: l'origine può essere usata su uno sfondo scuro.

HighContrast: l'origine può essere usata in qualsiasi sfondo in modalità contrasto elevato.

HighContrastLight: l'origine può essere usata su uno sfondo chiaro in modalità contrasto elevato.

HighContrastDark: l'origine può essere usata in uno sfondo scuro in modalità contrasto elevato.

Se l'attributo Background viene omesso, l'origine può essere usata in qualsiasi background.

Se Background è Chiaro, Scuro, HighContrastLight o HighContrastDark, i colori dell'origine non vengono mai invertiti. Se Background viene omesso o impostato su HighContrast, l'inversione dei colori dell'origine viene controllata dall'attributo AllowColorInversion dell'immagine.

Un <elemento Source> può avere esattamente uno dei sottoelementi facoltativi seguenti:

elemento Attributi (tutti obbligatori) Definizione
<Dimensione> Valore L'origine verrà usata per le immagini delle dimensioni specificate (in unità dispositivo). L'immagine sarà quadrata.
<SizeRange> MinSize, MaxSize L'origine verrà usata per le immagini da MinSize a MaxSize (in unità dispositivo) in modo inclusivo. L'immagine sarà quadrata.
<Dimensioni> Larghezza, altezza L'origine verrà usata per le immagini della larghezza e dell'altezza specificate (in unità dispositivo).
<DimensionRange> MinWidth, MinHeight,

MaxWidth, MaxHeight
L'origine verrà usata per le immagini dalla larghezza/altezza minima alla larghezza/altezza massima (in unità di dispositivo) inclusivamente.

Un <elemento Source> può anche avere un sottoelemento NativeResource> facoltativo<, che definisce un'origine <> caricata da un assembly nativo anziché da un assembly gestito.

<NativeResource Type="type" ID="int" />
Attributo Definizione
Type [Obbligatorio] Tipo della risorsa nativa, XAML o PNG
ID [Obbligatorio] Parte ID intero della risorsa nativa

ImageList

L'elemento <ImageList> definisce una raccolta di immagini che possono essere restituite in un'unica striscia. La striscia è basata su richiesta, in base alle esigenze.

<ImageList>
      <ContainedImage Guid="guid" ID="int" External="true/false" />
      <!-- optional additional ContainedImage elements -->
 </ImageList>
Attributo Definizione
GUID [Obbligatorio] Parte GUID del moniker dell'immagine
ID [Obbligatorio] Parte ID del moniker dell'immagine
Esterna [Facoltativo, impostazione predefinita false] Indica se il moniker dell'immagine fa riferimento a un'immagine nel manifesto corrente.

Il moniker per l'immagine contenuta non deve fare riferimento a un'immagine definita nel manifesto corrente. Se non è possibile trovare l'immagine contenuta nella raccolta immagini, verrà usata un'immagine segnaposto vuota al suo posto.

Uso del servizio immagini

Primi passaggi (gestiti)

Per usare il servizio immagini, è necessario aggiungere riferimenti ad alcuni o a tutti gli assembly seguenti al progetto:

  • Microsoft.VisualStudio.ImageCatalog.dll

    • Obbligatorio se si usa il catalogo immagini predefinito KnownMonikers.
  • Microsoft.VisualStudio.Imaging.dll

    • Obbligatorio se si usa CrispImage e ImageThemingUtilities nell'interfaccia utente WPF.
  • Microsoft.VisualStudio.Imaging.Interop.14.0.DesignTime.dll

    • Obbligatorio se si usano i tipi ImageMoniker e ImageAttributes .

    • EmbedInteropTypes deve essere impostato su true.

  • Microsoft.VisualStudio.Shell.Interop.14.0.DesignTime

    • Obbligatorio se si usa il tipo IVsImageService2 .

    • EmbedInteropTypes deve essere impostato su true.

  • Microsoft.VisualStudio.Utilities.dll

    • Obbligatorio se si usa BrushToColorConverter per ImageThemingUtilities.ImageBackgroundColor nell'interfaccia utente WPF.
  • Microsoft.visualstudio.shell.<VSVersion.0>

    • Obbligatorio se si usa il tipo IVsUIObject .
  • Microsoft.VisualStudio.Shell.Interop.10.0.dll

    • Obbligatorio se si usano gli helper dell'interfaccia utente correlati a WinForms.

    • EmbedInteropTypes deve essere impostato su true

Primi passaggi (nativo)

Per usare il servizio immagini, è necessario includere alcune o tutte le intestazioni seguenti al progetto:

  • KnownImageIds.h

    • Obbligatorio se si usa il catalogo immagini predefinito KnownMonikers, ma non è possibile usare il tipo ImageMoniker , ad esempio quando si restituiscono valori da IVsHierarchy GetGuidProperty o GetProperty chiamate.
  • KnownMonikers.h

    • Obbligatorio se si usa il catalogo immagini predefinito KnownMonikers.
  • ImageParameters140.h

    • Obbligatorio se si usano i tipi ImageMoniker e ImageAttributes .
  • VSShell140.h

    • Obbligatorio se si usa il tipo IVsImageService2 .
  • ImageThemingUtilities.h

    • Obbligatorio se non è possibile consentire al servizio immagini di gestirli automaticamente.

    • Non usare questa intestazione se il servizio immagini può gestire il tema dell'immagine.

  • VsDpiAwareness.h

    • Obbligatorio se si usano gli helper di riconoscimento DPI per ottenere il valore DPI corrente.

Ricerca per categorie scrivere una nuova interfaccia utente WPF?

  1. Per iniziare, aggiungere i riferimenti all'assembly necessari nella sezione dei primi passaggi precedenti al progetto. Non è necessario aggiungerli tutti, quindi aggiungere solo i riferimenti necessari. Nota: se si usa o si ha accesso a Colori invece di Pennelli, quindi è possibile ignorare il riferimento alle utilità, perché non sarà necessario il convertitore.

  2. Selezionare l'immagine desiderata e ottenere il relativo moniker. Usa un knownMoniker o usa il tuo se hai immagini e moniker personalizzati.

  3. Aggiungere CrispImages al codice XAML. Vedere l'esempio seguente.

  4. Impostare la proprietà ImageThemingUtilities.ImageBackgroundColor nella gerarchia dell'interfaccia utente. (Deve essere impostato nella posizione in cui il colore di sfondo è noto, non necessariamente sul CrispImage.) (Vedere l'esempio seguente).

<Window
  x:Class="WpfApplication.MainWindow"
  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  xmlns:imaging="clr-namespace:Microsoft.VisualStudio.Imaging;assembly=Microsoft.VisualStudio.Imaging"
  xmlns:theming="clr-namespace:Microsoft.VisualStudio.PlatformUI;assembly=Microsoft.VisualStudio.Imaging"
  xmlns:utilities="clr-namespace:Microsoft.VisualStudio.PlatformUI;assembly=Microsoft.VisualStudio.Utilities"
  xmlns:catalog="clr-namespace:Microsoft.VisualStudio.Imaging;assembly=Microsoft.VisualStudio.ImageCatalog"
  Title="MainWindow" Height="350" Width="525" UseLayoutRounding="True">
  <Window.Resources>
    <utilities:BrushToColorConverter x:Key="BrushToColorConverter"/>
  </Window.Resources>
  <StackPanel Background="White" VerticalAlignment="Center"
    theming:ImageThemingUtilities.ImageBackgroundColor="{Binding Background, RelativeSource={RelativeSource Self}, Converter={StaticResource BrushToColorConverter}}">
    <imaging:CrispImage Width="16" Height="16" Moniker="{x:Static catalog:KnownMonikers.MoveUp}" />
  </StackPanel>
</Window>

Ricerca per categorie aggiornare l'interfaccia utente WPF esistente?

L'aggiornamento dell'interfaccia utente WPF esistente è un processo relativamente semplice costituito da tre passaggi di base:

  1. Sostituire tutti gli <elementi Image> nell'interfaccia utente con <gli elementi CrispImage> .

  2. Modificare tutti gli attributi source in Attributi moniker.

    • Se l'immagine non cambia mai e si usa KnownMonikers, associare staticamente tale proprietà a KnownMoniker. Vedere l'esempio precedente.

    • Se l'immagine non cambia mai e si usa la propria immagine personalizzata, associare staticamente al proprio moniker.

    • Se l'immagine può cambiare, associare l'attributo Moniker a una proprietà di codice che notifica le modifiche alle proprietà.

  3. In un punto qualsiasi della gerarchia dell'interfaccia utente impostare ImageThemingUtilities.ImageBackgroundColor per assicurarsi che l'inversione dei colori funzioni correttamente.

    • Ciò potrebbe richiedere l'uso della classe BrushToColorConverter . Vedere l'esempio precedente.

Ricerca per categorie aggiornare l'interfaccia utente Win32?

Aggiungere quanto segue al codice ovunque appropriato per sostituire il caricamento non elaborato delle immagini. Cambiare i valori per la restituzione di HBITMAPs rispetto a HICONs rispetto a HIMAGELIST in base alle esigenze.

Ottenere il servizio immagini

CComPtr<IVsImageService2> spImgSvc;
CGlobalServiceProvider::HrQueryService(SID_SVsImageService, &spImgSvc);

Richiesta dell'immagine

UINT dpiX, dpiY;
HWND hwnd = // get the HWND where the image will be displayed
VsUI::CDpiAwareness::GetDpiForWindow(hwnd, &dpiX, &dpiY);

ImageAttributes attr = { 0 };
attr.StructSize      = sizeof(attributes);
attr.Format          = DF_Win32;
// IT_Bitmap for HBITMAP, IT_Icon for HICON, IT_ImageList for HIMAGELIST
attr.ImageType       = IT_Bitmap;
attr.LogicalWidth    = 16;
attr.LogicalHeight   = 16;
attr.Dpi             = dpiX;
// Desired RGBA color, if you don't use this, don't set IAF_Background below
attr.Background      = 0xFFFFFFFF;
attr.Flags           = IAF_RequiredFlags | IAF_Background;

CComPtr<IVsUIObject> spImg;
// Replace this KnownMoniker with your desired ImageMoniker
spImgSvc->GetImage(KnownMonikers::Blank, attributes, &spImg);

Ricerca per categorie aggiornare l'interfaccia utente di WinForms?

Aggiungere quanto segue al codice ovunque appropriato per sostituire il caricamento non elaborato delle immagini. Cambiare i valori per la restituzione di bitmap e icone in base alle esigenze.

Istruzione using utile

using GelUtilities = Microsoft.Internal.VisualStudio.PlatformUI.Utilities;

Ottenere il servizio immagini

// This or your preferred way of querying for Visual Studio services
IVsImageService2 imageService = (IVsImageService2)Package.GetGlobalService(typeof(SVsImageService));

Richiedere l'immagine

Control control = // get the control where the image will be displayed

ImageAttributes attributes = new ImageAttributes
{
    StructSize    = Marshal.SizeOf(typeof(ImageAttributes)),
    // IT_Bitmap for Bitmap, IT_Icon for Icon, IT_ImageList for ImageList
    ImageType     = (uint)_UIImageType.IT_Bitmap,
    Format        = (uint)_UIDataFormat.DF_WinForms,
    LogicalWidth  = 16,
    LogicalHeight = 16,
    Dpi           = (int)DpiAwareness.GetWindowDpi(control.Handle);
    // Desired RGBA color, if you don't use this, don't set IAF_Background below
    Background    = 0xFFFFFFFF,
    Flags         = unchecked((uint)_ImageAttributesFlags.IAF_RequiredFlags | _ImageAttributesFlags.IAF_Background),
};

// Replace this KnownMoniker with your desired ImageMoniker
IVsUIObject uIObj = imageService.GetImage(KnownMonikers.Blank, attributes);

Bitmap bitmap = (Bitmap)GelUtilities.GetObjectData(uiObj); // Use this if you need a bitmap
// Icon icon = (Icon)GelUtilities.GetObjectData(uiObj);    // Use this if you need an icon

Ricerca per categorie usare moniker immagine in una nuova finestra degli strumenti?

Il modello di progetto pacchetto VSIX è stato aggiornato per Visual Studio 2015. Per creare una nuova finestra degli strumenti, fare clic con il pulsante destro del mouse sul progetto VSIX e scegliere Aggiungi>nuovo elemento (CTRL+MAIUSC A).+ Nel nodo Estendibilità per la lingua del progetto selezionare Finestra strumenti personalizzata, assegnare un nome alla finestra degli strumenti e premere il pulsante Aggiungi .

Questi sono i punti chiave per usare i moniker in una finestra degli strumenti. Seguire le istruzioni per ognuna:

  1. La scheda della finestra degli strumenti quando le schede ottengono dimensioni sufficienti (usate anche nell'interruttore della +finestra CTRL TAB).

    Aggiungere questa riga al costruttore per la classe che deriva dal tipo ToolWindowPane :

    // Replace this KnownMoniker with your desired ImageMoniker
    this.BitmapImageMoniker = KnownMonikers.Blank;
    
  2. Comando per aprire la finestra degli strumenti.

    .vsct Nel file per il pacchetto modificare il pulsante di comando della finestra degli strumenti:

    <Button guid="guidPackageCmdSet" id="CommandId" priority="0x0100" type="Button">
      <Parent guid="guidSHLMainMenu" id="IDG_VS_WNDO_OTRWNDWS1"/>
      <!-- Replace this KnownMoniker with your desired ImageMoniker -->
      <Icon guid="ImageCatalogGuid" id="Blank" />
      <!-- Add this -->
      <CommandFlag>IconIsMoniker</CommandFlag>
      <Strings>
        <ButtonText>MyToolWindow</ButtonText>
      </Strings>
    </Button>
    

    Verificare che nella parte superiore del file esista anche quanto segue, dopo gli <Extern> elementi:

    <Include href="KnownImageIds.vsct"/>
    

Ricerca per categorie usare moniker immagine in una finestra degli strumenti esistente?

L'aggiornamento di una finestra degli strumenti esistente per l'uso di moniker di immagini è simile ai passaggi per la creazione di una nuova finestra degli strumenti.

Questi sono i punti chiave per usare i moniker in una finestra degli strumenti. Seguire le istruzioni per ognuna:

  1. La scheda della finestra degli strumenti quando le schede ottengono dimensioni sufficienti (usate anche nell'interruttore della +finestra CTRL TAB).

    1. Rimuovere queste righe (se esistenti) nel costruttore per la classe che deriva dal tipo ToolWindowPane :

      this.BitmapResourceID = <Value>;
      this.BitmapIndex = <Value>;
      
    2. Vedere il passaggio 1 della sezione "Ricerca per categorie usare moniker immagine in una nuova finestra degli strumenti?".

  2. Comando per aprire la finestra degli strumenti.

    • Vedere il passaggio 2 della sezione "Ricerca per categorie usare moniker immagine in una nuova finestra degli strumenti?".

Ricerca per categorie usare moniker di immagine in un file con estensione vsct?

Aggiornare il .vsct file come indicato dalle righe commentate seguenti:

<?xml version="1.0" encoding="utf-8"?>
<CommandTable xmlns="http://schemas.microsoft.com/VisualStudio/2005-10-18/CommandTable" xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <!--  Include the definitions for images included in the VS image catalog -->
  <Include href="KnownImageIds.vsct"/>
  <Commands package="guidMyPackage">
    <Buttons>
      <Button guid="guidMyCommandSet" id="cmdidMyCommand" priority="0x0000" type="Button">
        <!-- Add an Icon element, changing the attributes to match the image moniker you want to use.
             In this case, we're using the Guid for the VS image catalog.
             Change the id attribute to be the ID of the desired image moniker. -->
        <Icon guid="ImageCatalogGuid" id="OpenFolder" />
        <CommandFlag>DynamicVisibility</CommandFlag>
        <CommandFlag>DefaultInvisible</CommandFlag>
        <CommandFlag>DefaultDisabled</CommandFlag>
        <CommandFlag>CommandWellOnly</CommandFlag>
        <CommandFlag>IconAndText</CommandFlag>
        <!-- Add the IconIsMoniker CommandFlag -->
        <CommandFlag>IconIsMoniker</CommandFlag>
        <Strings>
          <ButtonText>Quick Fixes...</ButtonText>
          <CommandName>Show Quick Fixes</CommandName>
          <CanonicalName>ShowQuickFixes</CanonicalName>
          <LocCanonicalName>ShowQuickFixes</LocCanonicalName>
        </Strings>
      </Button>
    </Buttons>
  </Commands>
  <!-- It is recommended that you remove <Bitmap> elements that are no longer used in the vsct file -->
  <Symbols>
    <GuidSymbol name="guidMyPackage"    value="{1491e936-6ffe-474e-8371-30e5920d8fdd}" />
    <GuidSymbol name="guidMyCommandSet" value="{10347de4-69a9-47f4-a950-d3301f6d2bc7}">
      <IDSymbol name="cmdidMyCommand" value="0x9437" />
    </GuidSymbol>
  </Symbols>
</CommandTable>

Cosa accade se il file con estensione vsct deve essere letto anche dalle versioni precedenti di Visual Studio?

Le versioni precedenti di Visual Studio non riconoscono il flag di comando IconIsMoniker . È possibile usare immagini del servizio immagini nelle versioni di Visual Studio che la supportano, ma continuare a usare immagini di stile precedente nelle versioni precedenti di Visual Studio. A tale scopo, si lascia invariato il file (e quindi compatibile con le versioni precedenti di Visual Studio) e si crea un file CSV (valori delimitati da virgole) che esegue il .vsct mapping da coppie GUID/ID definite nell'elemento Bitmaps> di <un .vsct file alle coppie GUID/ID del moniker immagine.

Il formato del file CSV di mapping è:

Icon guid, Icon id, Moniker guid, Moniker id
b714fcf7-855e-4e4c-802a-1fd87144ccad,1,fda30684-682d-421c-8be4-650a2967058e,100
b714fcf7-855e-4e4c-802a-1fd87144ccad,2,fda30684-682d-421c-8be4-650a2967058e,200

Il file CSV viene distribuito con il pacchetto e il relativo percorso viene specificato dalla proprietà IconMappingFilename dell'attributo del pacchetto ProvideMenuResource :

[ProvideMenuResource("MyPackage.ctmenu", 1, IconMappingFilename="IconMappings.csv")]

IconMappingFilename è un percorso relativo basato in modo implicito su $PackageFolder$ (come nell'esempio precedente) o un percorso assoluto radice in modo esplicito in una directory definita da una variabile di ambiente, ad esempio @"%UserProfile%\dir1\dir2\MyMappingFile.csv".

Ricerca per categorie convertire un sistema di progetto?

Come fornire ImageMonikers per un progetto

  1. Implementare VSHPROPID_SupportsIconMonikers in IVsHierarchy del progetto e restituire true.

  2. Implementare VSHPROPID_IconMonikerImageList (se il progetto originale usato VSHPROPID_IconImgList) o VSHPROPID_IconMonikerGuid, VSHPROPID_IconMonikerId, VSHPROPID_OpenFolderIconMonikerGuid, VSHPROPID_OpenFolderIconMonikerId (se il progetto originale ha usato VSHPROPID_IconHandle e VSHPROPID_OpenFolderIconHandle).

  3. Modificare l'implementazione dei VSHPROPID originali per le icone per creare versioni "legacy" delle icone se i punti di estensione li richiedono. IVsImageService2 offre funzionalità necessarie per ottenere tali icone

    Requisiti aggiuntivi per le versioni di progetto VB/C#

    Implementare VSHPROPID_SupportsIconMonikers solo se si rileva che il progetto è il sapore più esterno. In caso contrario, il sapore più esterno effettivo potrebbe non supportare moniker di immagini in realtà e il tuo sapore di base potrebbe effettivamente "nascondere" immagini personalizzate.

    Ricerca per categorie usare moniker immagine in CPS?

    L'impostazione di immagini personalizzate in CPS (Common Project System) può essere eseguita manualmente o tramite un modello di elemento fornito con Project System Extensibility SDK.

    Uso di Project System Extensibility SDK

    Seguire le istruzioni in Specificare icone personalizzate per il tipo di progetto/Elemento per personalizzare le immagini CPS. Altre informazioni su CPS sono disponibili nella documentazione sull'estendibilità di Visual Studio Project System

    Usare manualmente ImageMonikers

  4. Implementare ed esportare l'interfaccia IProjectTreeModifier nel sistema di progetto.

  5. Determinare il moniker knownMoniker o personalizzato da usare.

  6. Nel metodo ApplyModifications eseguire le operazioni seguenti in un punto del metodo prima di restituire il nuovo albero, simile all'esempio seguente:

    // Replace this KnownMoniker with your desired ImageMoniker
    tree = tree.SetIcon(KnownMonikers.Blank.ToProjectSystemType());
    
  7. Se si sta creando un nuovo albero, è possibile impostare le immagini personalizzate passando i moniker desiderati nel metodo NewTree, simile all'esempio seguente:

    // Replace this KnownMoniker with your desired ImageMoniker
    ProjectImageMoniker icon         = KnownMonikers.FolderClosed.ToProjectSystemType();
    ProjectImageMoniker expandedIcon = KnownMonikers.FolderOpened.ToProjectSystemType();
    
    return this.ProjectTreeFactory.Value.NewTree(/*caption*/<value>,
                                                 /*filePath*/<value>,
                                                 /*browseObjectProperties*/<value>,
                                                 icon,
                                                 expandedIcon);
    

Ricerca per categorie convertire da una striscia di immagini reale a una strip di immagini basata su moniker?

Devo supportare HIMAGELISTs

Se è presente una strip di immagini già esistente per il codice che si vuole aggiornare per usare il servizio immagini, ma si è vincolati dalle API che richiedono il passaggio di elenchi di immagini, è comunque possibile ottenere i vantaggi del servizio immagini. Per creare una strip di immagini basata su moniker, seguire questa procedura per creare un manifesto da moniker esistenti.

  1. Eseguire lo strumento ManifestFromResources , passandolo alla striscia di immagini. Verrà generato un manifesto per la strip.

    • Consigliato: specificare un nome non predefinito per il manifesto in base all'utilizzo.
  2. Se usi solo KnownMonikers, esegui le operazioni seguenti:

    • Sostituire la <sezione Immagini> del manifesto con <Images/>.

    • Rimuovere tutti gli ID dell'immagine secondaria (qualsiasi elemento con <imagestrip name>_###).

    • Consigliato: rinominare il simbolo di simbolo AssetsGuid e il simbolo di strip dell'immagine in base all'utilizzo.

    • Sostituire il GUID di ogni ContainedImage con $(ImageCatalogGuid), sostituire l'ID di ogni ContainedImage con $(<moniker>) e aggiungere l'attributo External="true" a ogni ContainedImage

      • <il moniker> deve essere sostituito con KnownMonikerche corrisponde all'immagine, ma con "KnownMonikers". rimosso dal nome.
    • Aggiungere <Import Manifest="$(ManifestFolder)\<Relative install dir path to *>\Microsoft.VisualStudio.ImageCatalog.imagemanifest" /*> nella parte superiore della <sezione Symbols> .

      • Il percorso relativo è determinato dal percorso di distribuzione definito nella creazione del programma di installazione per il manifesto.
  3. Eseguire lo strumento ManifestToCode per generare wrapper in modo che il codice esistente abbia un moniker che può usare per eseguire una query sul servizio immagini per la striscia di immagini.

    • Consigliato: specificare nomi non predefiniti per i wrapper e gli spazi dei nomi in base all'utilizzo.
  4. Eseguire tutte le operazioni di aggiunta, creazione/distribuzione del programma di installazione e altre modifiche al codice per l'uso con il servizio immagini e i nuovi file.

    Manifesto di esempio che include immagini interne ed esterne per vedere l'aspetto seguente:

<?xml version="1.0"?>
<ImageManifest
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xmlns:xsd="http://www.w3.org/2001/XMLSchema"
  xmlns="http://schemas.microsoft.com/VisualStudio/ImageManifestSchema/2014">

  <Symbols>
    <!-- This needs to be the relative path from your manifest to the ImageCatalog's manifest
         where $(ManifestFolder) is the deployed location of this manifest. -->
    <Import Manifest="$(ManifestFolder)\<RelPath>\Microsoft.VisualStudio.ImageCatalog.imagemanifest" />

    <String Name="Resources" Value="/My.Assembly.Name;Component/Resources/ImageStrip" />
    <Guid Name="ImageGuid" Value="{fb41b7ef-6587-480c-aa27-5b559d42cfc9}" />
    <Guid Name="ImageStripGuid" Value="{9c84a570-d9a7-4052-a340-188fb276f973}" />
    <ID Name="MyImage_0" Value="100" />
    <ID Name="MyImage_1" Value="101" />
    <ID Name="InternalList" Value="1001" />
    <ID Name="ExternalList" Value="1002" />
  </Symbols>

  <Images>
    <Image Guid="$(ImageGuid)" ID="$(MyImage_0)">
      <Source Uri="$(Resources)/MyImage_0.png">
        <Size Value="16" />
      </Source>
    </Image>
    <Image Guid="$(ImageGuid)" ID="$(MyImage_1)">
      <Source Uri="$(Resources)/MyImage_1.png">
        <Size Value="16" />
      </Source>
    </Image>
  </Images>

  <ImageLists>
    <ImageList Guid="$(ImageStripGuid)" ID="$(InternalList)">
      <ContainedImage Guid="$(ImageGuid)" ID="$(MyImage_0)" />
      <ContainedImage Guid="$(ImageGuid)" ID="$(MyImage_1)" />
    </ImageList>
    <ImageList Guid="$(ImageStripGuid)" ID="$(ExternalList)">
      <ContainedImage Guid="$(ImageCatalogGuid)" ID="$(StatusError)" External="true" />
      <ContainedImage Guid="$(ImageCatalogGuid)" ID="$(StatusWarning)" External="true" />
      <ContainedImage Guid="$(ImageCatalogGuid)" ID="$(StatusInformation)" External="true" />
    </ImageList>
  </ImageLists>

</ImageManifest>

Non ho bisogno di supportare HIMAGELISTs

  1. Determinare il set di KnownMonikers che corrispondono alle immagini nella striscia di immagini oppure creare moniker personalizzati per le immagini nella striscia di immagini.

  2. Aggiornare il mapping usato per ottenere l'immagine in corrispondenza dell'indice richiesto nella striscia di immagini per usare invece i moniker.

  3. Aggiornare il codice per usare il servizio immagini per richiedere moniker tramite il mapping aggiornato. Questo potrebbe significare l'aggiornamento a CrispImages per il codice gestito o richiedere HBITMAPs o HICON dal servizio immagini e passarli per il codice nativo.

Test delle immagini

È possibile usare lo strumento Visualizzatore librerie immagini per testare i manifesti delle immagini per assicurarsi che tutto sia stato creato correttamente. È possibile trovare lo strumento in Visual Studio 2015 SDK. La documentazione per questo strumento e altre informazioni sono disponibili qui.

Risorse aggiuntive

Esempi

Diversi esempi di Visual Studio in GitHub sono stati aggiornati per illustrare come usare il servizio immagini come parte di vari punti di estendibilità di Visual Studio.

Verificare http://github.com/Microsoft/VSSDK-Extensibility-Samples la presenza degli esempi più recenti.

Strumenti

È stato creato un set di strumenti di supporto per il servizio immagini per facilitare la creazione/aggiornamento dell'interfaccia utente che funziona con il servizio immagini. Per altre informazioni su ogni strumento, vedere la documentazione fornita con gli strumenti. Gli strumenti sono inclusi come parte di Visual Studio 2015 SDK.

ManifestFromResources

Lo strumento Manifest from Resources accetta un elenco di risorse immagine (PNG o XAML) e genera un file manifesto dell'immagine per l'uso di tali immagini con il servizio immagini.

ManifestToCode

Lo strumento Manifest to Code accetta un file manifesto dell'immagine e genera un file wrapper per fare riferimento ai valori del manifesto nel codice (C++, C#o VB) o .vsct nei file.

ImageLibraryViewer

Lo strumento Visualizzatore librerie immagini può caricare manifesti di immagini e consentire all'utente di modificarli nello stesso modo in cui Visual Studio potrebbe assicurarsi che il manifesto sia stato creato correttamente. L'utente può modificare lo sfondo, le dimensioni, l'impostazione DPI, il contrasto elevato e altre impostazioni. Visualizza anche le informazioni di caricamento per trovare gli errori nei manifesti e visualizza le informazioni di origine per ogni immagine nel manifesto.

Domande frequenti

  • Sono presenti dipendenze che è necessario includere durante il caricamento di <Riferimenti Include="Microsoft.VisualStudio.*. Interop.14.0.DesignTime" />?

    • Impostare EmbedInteropTypes="true" in tutte le DLL di interoperabilità.
  • Ricerca per categorie distribuire un manifesto dell'immagine con l'estensione?

    • Aggiungere il .imagemanifest file al progetto.

    • Impostare "Includi in VSIX" su True.

  • Sto aggiornando il sistema di progetto CPS. Che cosa è successo a ImageName e StockIconService?

    • Questi sono stati rimossi quando CPS è stato aggiornato per l'uso di moniker. Non è più necessario chiamare StockIconService, è sufficiente passare il knownMoniker desiderato al metodo o alla proprietà usando il metodo di estensione ToProjectSystemType() nelle utilità CPS. È possibile trovare un mapping da ImageName a KnownMonikers di seguito:

      ImageName KnownMoniker
      ImageName.OfflineWebApp KnownImageIds.Web
      ImageName.WebReferencesFolder KnownImageIds.Web
      ImageName.OpenReferenceFolder KnownImageIds.FolderOpened
      ImageName.ReferenceFolder KnownImageIds.Reference
      ImageName.Reference KnownImageIds.Reference
      ImageName.SdlWebReference KnownImageIds.WebReferenceFolder
      ImageName.DiscoWebReference KnownImageIds.DynamicDiscoveryDocument
      ImageName.Folder KnownImageIds.FolderClosed
      ImageName.OpenFolder KnownImageIds.FolderOpened
      ImageName.ExcludedFolder KnownImageIds.HiddenFolderClosed
      ImageName.OpenExcludedFolder KnownImageIds.HiddenFolderOpened
      ImageName.ExcludedFile KnownImageIds.HiddenFile
      ImageName.DependentFile KnownImageIds.GenerateFile
      ImageName.MissingFile KnownImageIds.DocumentWarning
      ImageName.WindowsForm KnownImageIds.WindowsForm
      ImageName.WindowsUserControl KnownImageIds.UserControl
      ImageName.WindowsComponent KnownImageIds.ComponentFile
      ImageName.XmlSchema KnownImageIds.XMLSchema
      ImageName.XmlFile KnownImageIds.XMLFile
      ImageName.WebForm KnownImageIds.Web
      ImageName.WebService KnownImageIds.WebService
      ImageName.WebUserControl KnownImageIds.WebUserControl
      ImageName.WebCustomUserControl KnownImageIds.WebCustomControl
      ImageName.AspPage KnownImageIds.ASPFile
      ImageName.GlobalApplicationClass KnownImageIds. Impostazioni File
      ImageName.WebConfig KnownImageIds.ConfigurationFile
      ImageName.HtmlPage KnownImageIds.HTMLFile
      ImageName.StyleSheet KnownImageIds.StyleSheet
      ImageName.ScriptFile KnownImageIds.JSScript
      ImageName.TextFile KnownImageIds.Document
      ImageName. Impostazioni File KnownImageIds. Impostazioni
      ImageName.Resources KnownImageIds.DocumentGroup
      ImageName.Bitmap KnownImageIds.Image
      ImageName.Icon KnownImageIds.IconFile
      ImageName.Image KnownImageIds.Image
      ImageName.ImageMap KnownImageIds.ImageMapFile
      ImageName.XWorld KnownImageIds.XWorldFile
      ImageName.Audio KnownImageIds.Sound
      ImageName.Video KnownImageIds.Media
      ImageName.Cab KnownImageIds.CABProject
      ImageName.Jar KnownImageIds.JARFile
      ImageName.DataEnvironment KnownImageIds.DataTable
      ImageName.PreviewFile KnownImageIds.Report
      ImageName.DanglingReference KnownImageIds.ReferenceWarning
      ImageName.XsltFile KnownImageIds.XSLTransform
      ImageName.Cursor KnownImageIds.CursorFile
      ImageName.AppDesignerFolder KnownImageIds.Property
      ImageName.Data KnownImageIds.Database
      ImageName.Application KnownImageIds.Application
      ImageName.DataSet KnownImageIds.DatabaseGroup
      ImageName.Pfx KnownImageIds.Certificate
      ImageName.Snk KnownImageIds.Rule
      ImageName.VisualBasicProject KnownImageIds.VBProjectNode
      ImageName.CSharpProject KnownImageIds.CSProjectNode
      ImageName.Empty KnownImageIds.Blank
      ImageName.MissingFolder KnownImageIds.FolderOffline
      ImageName.SharedImportReference KnownImageIds.SharedProject
      ImageName.SharedProjectCs KnownImageIds.CSSharedProject
      ImageName.SharedProjectVc KnownImageIds.CPPSharedProject
      ImageName.SharedProjectJs KnownImageIds.JSSharedProject
      ImageName.CSharpCodeFile KnownImageIds.CSFileNode
      ImageName.VisualBasicCodeFile KnownImageIds.VBFileNode
    • Sto aggiornando il provider dell'elenco di completamento. Quali elementi KnownMonikers corrispondono ai vecchi valori StandardGlyphGroup e StandardGlyph ?

      Nome Nome Nome
      GlyphGroupClass GlyphItemPublic ClassPublic
      GlyphGroupClass GlyphItemInternal ClassInternal
      GlyphGroupClass GlyphItemFriend ClassInternal
      GlyphGroupClass GlyphItemProtected ClassProtected
      GlyphGroupClass GlyphItemPrivate ClassPrivate
      GlyphGroupClass GlyphItemShortcut ClassShortcut
      GlyphGroupConstant GlyphItemPublic ConstantPublic
      GlyphGroupConstant GlyphItemInternal ConstantInternal
      GlyphGroupConstant GlyphItemFriend ConstantInternal
      GlyphGroupConstant GlyphItemProtected ConstantProtected
      GlyphGroupConstant GlyphItemPrivate ConstantPrivate
      GlyphGroupConstant GlyphItemShortcut ConstantShortcut
      GlyphGroupDelegate GlyphItemPublic DelegatePublic
      GlyphGroupDelegate GlyphItemInternal DelegateInternal
      GlyphGroupDelegate GlyphItemFriend DelegateInternal
      GlyphGroupDelegate GlyphItemProtected DelegateProtected
      GlyphGroupDelegate GlyphItemPrivate DelegatePrivate
      GlyphGroupDelegate GlyphItemShortcut DelegateShortcut
      GlyphGroupEnum GlyphItemPublic EnumerazionePublic
      GlyphGroupEnum GlyphItemInternal EnumerationInternal
      GlyphGroupEnum GlyphItemFriend EnumerationInternal
      GlyphGroupEnum GlyphItemProtected EnumerationProtected
      GlyphGroupEnum GlyphItemPrivate EnumerationPrivate
      GlyphGroupEnum GlyphItemShortcut EnumerationShortcut
      GlyphGroupEnumMember GlyphItemPublic EnumerationItemPublic
      GlyphGroupEnumMember GlyphItemInternal EnumerationItemInternal
      GlyphGroupEnumMember GlyphItemFriend EnumerationItemInternal
      GlyphGroupEnumMember GlyphItemProtected EnumerationItemProtected
      GlyphGroupEnumMember GlyphItemPrivate EnumerationItemPrivate
      GlyphGroupEnumMember GlyphItemShortcut EnumerationItemShortcut
      GlyphGroupEvent GlyphItemPublic EventPublic
      GlyphGroupEvent GlyphItemInternal EventInternal
      GlyphGroupEvent GlyphItemFriend EventInternal
      GlyphGroupEvent GlyphItemProtected EventProtected
      GlyphGroupEvent GlyphItemPrivate EventPrivate
      GlyphGroupEvent GlyphItemShortcut EventShortcut
      GlyphGroupException GlyphItemPublic ExceptionPublic
      GlyphGroupException GlyphItemInternal ExceptionInternal
      GlyphGroupException GlyphItemFriend ExceptionInternal
      GlyphGroupException GlyphItemProtected ExceptionProtected
      GlyphGroupException GlyphItemPrivate ExceptionPrivate
      GlyphGroupException GlyphItemShortcut ExceptionShortcut
      GlyphGroupField GlyphItemPublic FieldPublic
      GlyphGroupField GlyphItemInternal FieldInternal
      GlyphGroupField GlyphItemFriend FieldInternal
      GlyphGroupField GlyphItemProtected FieldProtected
      GlyphGroupField GlyphItemPrivate FieldPrivate
      GlyphGroupField GlyphItemShortcut FieldShortcut
      GlyphGroupInterface GlyphItemPublic InterfacePublic
      GlyphGroupInterface GlyphItemInternal InterfaceInternal
      GlyphGroupInterface GlyphItemFriend InterfaceInternal
      GlyphGroupInterface GlyphItemProtected InterfaceProtected
      GlyphGroupInterface GlyphItemPrivate InterfacePrivate
      GlyphGroupInterface GlyphItemShortcut InterfaceShortcut
      GlyphGroupMacro GlyphItemPublic MacroPublic
      GlyphGroupMacro GlyphItemInternal MacroInternal
      GlyphGroupMacro GlyphItemFriend MacroInternal
      GlyphGroupMacro GlyphItemProtected MacroProtected
      GlyphGroupMacro GlyphItemPrivate MacroPrivate
      GlyphGroupMacro GlyphItemShortcut MacroShortcut
      GlyphGroupMap GlyphItemPublic MapPublic
      GlyphGroupMap GlyphItemInternal MapInternal
      GlyphGroupMap GlyphItemFriend MapInternal
      GlyphGroupMap GlyphItemProtected MapProtected
      GlyphGroupMap GlyphItemPrivate MapPrivate
      GlyphGroupMap GlyphItemShortcut MapShortcut
      GlyphGroupMapItem GlyphItemPublic MapItemPublic
      GlyphGroupMapItem GlyphItemInternal MapItemInternal
      GlyphGroupMapItem GlyphItemFriend MapItemInternal
      GlyphGroupMapItem GlyphItemProtected MapItemProtected
      GlyphGroupMapItem GlyphItemPrivate MapItemPrivate
      GlyphGroupMapItem GlyphItemShortcut MapItemShortcut
      GlyphGroupMethod GlyphItemPublic MethodPublic
      GlyphGroupMethod GlyphItemInternal MethodInternal
      GlyphGroupMethod GlyphItemFriend MethodInternal
      GlyphGroupMethod GlyphItemProtected MethodProtected
      GlyphGroupMethod GlyphItemPrivate MethodPrivate
      GlyphGroupMethod GlyphItemShortcut MethodShortcut
      GlyphGroupOverload GlyphItemPublic MethodPublic
      GlyphGroupOverload GlyphItemInternal MethodInternal
      GlyphGroupOverload GlyphItemFriend MethodInternal
      GlyphGroupOverload GlyphItemProtected MethodProtected
      GlyphGroupOverload GlyphItemPrivate MethodPrivate
      GlyphGroupOverload GlyphItemShortcut MethodShortcut
      GlyphGroupModule GlyphItemPublic ModulePublic
      GlyphGroupModule GlyphItemInternal ModuleInternal
      GlyphGroupModule GlyphItemFriend ModuleInternal
      GlyphGroupModule GlyphItemProtected ModuleProtected
      GlyphGroupModule GlyphItemPrivate ModulePrivate
      GlyphGroupModule GlyphItemShortcut ModuleShortcut
      GlyphGroupNamespace GlyphItemPublic NamespacePublic
      GlyphGroupNamespace GlyphItemInternal Spazio dei nomiInternal
      GlyphGroupNamespace GlyphItemFriend Spazio dei nomiInternal
      GlyphGroupNamespace GlyphItemProtected NamespaceProtected
      GlyphGroupNamespace GlyphItemPrivate NamespacePrivate
      GlyphGroupNamespace GlyphItemShortcut NamespaceShortcut
      GlyphGroupOperator GlyphItemPublic OperatorPublic
      GlyphGroupOperator GlyphItemInternal OperatorInternal
      GlyphGroupOperator GlyphItemFriend OperatorInternal
      GlyphGroupOperator GlyphItemProtected OperatorProtected
      GlyphGroupOperator GlyphItemPrivate OperatorPrivate
      GlyphGroupOperator GlyphItemShortcut OperatorShortcut
      GlyphGroupProperty GlyphItemPublic PropertyPublic
      GlyphGroupProperty GlyphItemInternal PropertyInternal
      GlyphGroupProperty GlyphItemFriend PropertyInternal
      GlyphGroupProperty GlyphItemProtected PropertyProtected
      GlyphGroupProperty GlyphItemPrivate PropertyPrivate
      GlyphGroupProperty GlyphItemShortcut PropertyShortcut
      GlyphGroupStruct GlyphItemPublic StructurePublic
      GlyphGroupStruct GlyphItemInternal StructureInternal
      GlyphGroupStruct GlyphItemFriend StructureInternal
      GlyphGroupStruct GlyphItemProtected StructureProtected
      GlyphGroupStruct GlyphItemPrivate StructurePrivate
      GlyphGroupStruct GlyphItemShortcut StructureShortcut
      GlyphGroupTemplate GlyphItemPublic TemplatePublic
      GlyphGroupTemplate GlyphItemInternal TemplateInternal
      GlyphGroupTemplate GlyphItemFriend TemplateInternal
      GlyphGroupTemplate GlyphItemProtected TemplateProtected
      GlyphGroupTemplate GlyphItemPrivate TemplatePrivate
      GlyphGroupTemplate GlyphItemShortcut TemplateShortcut
      GlyphGroupTypedef GlyphItemPublic TypeDefinitionPublic
      GlyphGroupTypedef GlyphItemInternal TypeDefinitionInternal
      GlyphGroupTypedef GlyphItemFriend TypeDefinitionInternal
      GlyphGroupTypedef GlyphItemProtected TypeDefinitionProtected
      GlyphGroupTypedef GlyphItemPrivate TypeDefinitionPrivate
      GlyphGroupTypedef GlyphItemShortcut TypeDefinitionShortcut
      GlyphGroupType GlyphItemPublic TypePublic
      GlyphGroupType GlyphItemInternal TypeInternal
      GlyphGroupType GlyphItemFriend TypeInternal
      GlyphGroupType GlyphItemProtected TypeProtected
      GlyphGroupType GlyphItemPrivate TypePrivate
      GlyphGroupType GlyphItemShortcut TypeShortcut
      GlyphGroupUnion GlyphItemPublic UnionPublic
      GlyphGroupUnion GlyphItemInternal UnionInternal
      GlyphGroupUnion GlyphItemFriend UnionInternal
      GlyphGroupUnion GlyphItemProtected UnionProtected
      GlyphGroupUnion GlyphItemPrivate UnionPrivate
      GlyphGroupUnion GlyphItemShortcut UnionShortcut
      GlyphGroupVariable GlyphItemPublic FieldPublic
      GlyphGroupVariable GlyphItemInternal FieldInternal
      GlyphGroupVariable GlyphItemFriend FieldInternal
      GlyphGroupVariable GlyphItemProtected FieldProtected
      GlyphGroupVariable GlyphItemPrivate FieldPrivate
      GlyphGroupVariable GlyphItemShortcut FieldShortcut
      GlyphGroupValueType GlyphItemPublic ValueTypePublic
      GlyphGroupValueType GlyphItemInternal ValueTypeInternal
      GlyphGroupValueType GlyphItemFriend ValueTypeInternal
      GlyphGroupValueType GlyphItemProtected ValueTypeProtected
      GlyphGroupValueType GlyphItemPrivate ValueTypePrivate
      GlyphGroupValueType GlyphItemShortcut ValueTypeShortcut
      GlyphGroupIntrinsic GlyphItemPublic ObjectPublic
      GlyphGroupIntrinsic GlyphItemInternal ObjectInternal
      GlyphGroupIntrinsic GlyphItemFriend ObjectInternal
      GlyphGroupIntrinsic GlyphItemProtected ObjectProtected
      GlyphGroupIntrinsic GlyphItemPrivate ObjectPrivate
      GlyphGroupIntrinsic GlyphItemShortcut ObjectShortcut
      GlyphGroupJSharpMethod GlyphItemPublic MethodPublic
      GlyphGroupJSharpMethod GlyphItemInternal MethodInternal
      GlyphGroupJSharpMethod GlyphItemFriend MethodInternal
      GlyphGroupJSharpMethod GlyphItemProtected MethodProtected
      GlyphGroupJSharpMethod GlyphItemPrivate MethodPrivate
      GlyphGroupJSharpMethod GlyphItemShortcut MethodShortcut
      GlyphGroupJSharpField GlyphItemPublic FieldPublic
      GlyphGroupJSharpField GlyphItemInternal FieldInternal
      GlyphGroupJSharpField GlyphItemFriend FieldInternal
      GlyphGroupJSharpField GlyphItemProtected FieldProtected
      GlyphGroupJSharpField GlyphItemPrivate FieldPrivate
      GlyphGroupJSharpField GlyphItemShortcut FieldShortcut
      GlyphGroupJSharpClass GlyphItemPublic ClassPublic
      GlyphGroupJSharpClass GlyphItemInternal ClassInternal
      GlyphGroupJSharpClass GlyphItemFriend ClassInternal
      GlyphGroupJSharpClass GlyphItemProtected ClassProtected
      GlyphGroupJSharpClass GlyphItemPrivate ClassPrivate
      GlyphGroupJSharpClass GlyphItemShortcut ClassShortcut
      GlyphGroupJSharpNamespace GlyphItemPublic NamespacePublic
      GlyphGroupJSharpNamespace GlyphItemInternal Spazio dei nomiInternal
      GlyphGroupJSharpNamespace GlyphItemFriend Spazio dei nomiInternal
      GlyphGroupJSharpNamespace GlyphItemProtected NamespaceProtected
      GlyphGroupJSharpNamespace GlyphItemPrivate NamespacePrivate
      GlyphGroupJSharpNamespace GlyphItemShortcut NamespaceShortcut
      GlyphGroupJSharpInterface GlyphItemPublic InterfacePublic
      GlyphGroupJSharpInterface GlyphItemInternal InterfaceInternal
      GlyphGroupJSharpInterface GlyphItemFriend InterfaceInternal
      GlyphGroupJSharpInterface GlyphItemProtected InterfaceProtected
      GlyphGroupJSharpInterface GlyphItemPrivate InterfacePrivate
      GlyphGroupJSharpInterface GlyphItemShortcut InterfaceShortcut
      GlyphGroupError StatusError
      GlyphBscFile ClassFile
      GlyphAssembly Riferimento
      GlyphLibrary Libreria
      GlyphVBProject VBProjectNode
      GlyphProject CSProjectNode
      GlyphCppProject CPPProjectNode
      GlyphDialogId Dialog
      GlyphOpenFolder FolderOpened
      GlyphClosedFolder FolderClosed
      GlyphArrow GoToNext
      GlyphCSharpFile CSFileNode
      GlyphCSharpExpansion Frammento di codice
      GlyphKeyword IntellisenseKeyword
      GlyphInformation StatusInformation
      GlyphReference ClassMethodReference
      GlyphRecursion Ricorsione
      GlyphXmlItem Tag
      GlyphJSharpProject DocumentCollection
      GlyphJSharpDocument Documento
      GlyphForwardType GoToNext
      GlyphCallersGraph CallTo
      GlyphCallGraph CallFrom
      GlyphWarning StatusWarning
      GlyphMaybeReference Questionmark
      GlyphMaybeCaller CallTo
      GlyphMaybeCall CallFrom
      GlyphExtensionMethod ExtensionMethod
      GlyphExtensionMethodInternal ExtensionMethod
      GlyphExtensionMethodFriend ExtensionMethod
      GlyphExtensionMethodProtected ExtensionMethod
      GlyphExtensionMethodPrivate ExtensionMethod
      GlyphExtensionMethodShortcut ExtensionMethod
      GlyphXmlAttribute XmlAttribute
      GlyphXmlChild XmlElement
      GlyphXmlDescendant XmlDescendant
      GlyphXmlNamespace Xmlnamespace
      GlyphXmlAttributeQuestion XmlAttributeLowConfidence
      GlyphXmlAttributeCheck XmlAttributeHighConfidence
      GlyphXmlChildQuestion XmlElementLowConfidence
      GlyphXmlChildCheck XmlElementHighConfidence
      GlyphXmlDescendantQuestion XmlDescendantLowConfidence
      GlyphXmlDescendantCheck XmlDescendantHighConfidence
      GlyphCompletionWarning IntellisenseWarning