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:
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
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" />
<!-- If your assembly is strongly named, you'll need the version and public key token as well -->
<!-- <String Name="AssemblyName" Value="Microsoft.VisualStudio.Shell.UI.Internal;v17.0.0.0;b03f5f7f11d50a3a" /> -->
</Symbols>
Sottoelemento | Definizione |
---|---|
Importa | 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 |
Esterno | [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?
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.
Selezionare l'immagine desiderata e ottenere il relativo moniker. Usa un knownMoniker o usa il tuo se hai immagini e moniker personalizzati.
Aggiungere CrispImages al codice XAML. Vedere l'esempio seguente.
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:
Sostituire tutti gli <elementi Image> nell'interfaccia utente con <gli elementi CrispImage> .
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à.
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:
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;
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:
La scheda della finestra degli strumenti quando le schede ottengono dimensioni sufficienti (usate anche nell'interruttore della +finestra CTRL TAB).
Rimuovere queste righe (se esistenti) nel costruttore per la classe che deriva dal tipo ToolWindowPane :
this.BitmapResourceID = <Value>; this.BitmapIndex = <Value>;
Vedere il passaggio 1 della sezione "Ricerca per categorie usare moniker immagine in una nuova finestra degli strumenti?".
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
Implementare VSHPROPID_SupportsIconMonikers in IVsHierarchy del progetto e restituire true.
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).
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
Implementare ed esportare l'interfaccia IProjectTreeModifier nel sistema di progetto.
Determinare il moniker knownMoniker o personalizzato da usare.
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());
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.
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.
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 KnownMoniker che 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.
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.
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
Determinare il set di KnownMonikers che corrispondono alle immagini nella striscia di immagini oppure creare moniker personalizzati per le immagini nella striscia di immagini.
Aggiornare il mapping usato per ottenere l'immagine in corrispondenza dell'indice richiesto nella striscia di immagini per usare invece i moniker.
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.
Le mie immagini non funzionano ancora, come faccio a capire cosa c'è di sbagliato?
Visual Studio potrebbe non trovare il manifesto dell'immagine. Per motivi di prestazioni, Visual Studio limita la profondità di ricerca delle cartelle, pertanto è consigliabile mantenere il manifesto dell'immagine nella cartella radice dell'estensione.
Potrebbero mancare informazioni sull'assembly nel file manifesto dell'immagine. Gli assembly con nome sicuro richiedono informazioni aggiuntive per essere caricati da Visual Studio. Per caricare un assembly con nome sicuro, è necessario includere (oltre al nome dell'assembly) la versione dell'assembly e il token di chiave pubblica negli URI della risorsa per le immagini nel manifesto dell'immagine.
<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> <String Name="Resources" Value="/Microsoft.VisualStudio.Shell.UI.Internal;v17.0.0.0;b03f5f7f11d50a3a;Component/Resources" /> ... </Symbols> ... </ImageManifest>
Potrebbe mancare una voce codebase per l'assembly di immagini. Se l'assembly non è ancora caricato dal momento in cui Visual Studio ne ha bisogno, sarà necessario sapere dove trovare l'assembly per caricarlo. Per aggiungere una codebase per l'assembly, è possibile usare ProvideCodeBaseAttribute per assicurarsi che venga generata una voce codebase e inclusa nel pkgdef dell'estensione.
[assembly: ProvideCodeBase(AssemblyName = "ClassLibrary1", Version = "1.0.0.0", CodeBase = "$PackageFolder$\\ClassLibrary1.dll")]
Se le opzioni precedenti non risolvono il problema di caricamento delle immagini, è possibile abilitare la registrazione eliminando le voci seguenti in un pkgdef nell'estensione:
[$RootKey$\ImageLibrary] "TraceLevel"="Verbose" "TraceFilename"="ImageLibrary.log"
Verrà creato un file di log denominato ImageLibrary.log nella cartella %UserProfile%. Assicurarsi di eseguire "devenv /updateConfiguration" da un prompt dei comandi per sviluppatori dopo aver aggiunto queste voci a un pkgdef. Ciò garantisce che le voci di registrazione siano abilitate e che Visual Studio aggiorni la cache del manifesto dell'immagine per individuare eventuali errori che possono verificarsi durante la lettura del manifesto dell'immagine. Se si esegue quindi lo scenario in cui si prevede il caricamento dell'immagine, il file di log conterrà sia la registrazione della registrazione che la registrazione delle richieste per l'immagine.
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.SettingsFile ImageName.WebConfig KnownImageIds.ConfigurationFile ImageName.HtmlPage KnownImageIds.HTMLFile ImageName.StyleSheet KnownImageIds.StyleSheet ImageName.ScriptFile KnownImageIds.JSScript ImageName.TextFile KnownImageIds.Document ImageName.SettingsFile KnownImageIds.Settings 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 Document 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