Share via


Bilddienst und -katalog

Dieses Cookbook enthält Anleitungen und bewährte Methoden für die Einführung des Visual Studio Image Service und des Bildkatalogs, der in Visual Studio 2015 eingeführt wurde.

Mit dem in Visual Studio 2015 eingeführten Image Service können Entwickler die besten Bilder für das Gerät und das ausgewählte Design des Benutzers abrufen, um das Bild anzuzeigen, einschließlich des richtigen Designs für den Kontext, in dem sie angezeigt werden. Die Einführung des Bilddienstes wird dazu beitragen, wichtige Probleme bei der Wartung von Anlagen, der HDPI-Skalierung und der Themengestaltung zu beseitigen.

Probleme heute Lösungen
Hintergrundfarbe Mischen Integriertes Alphablending
Designbilder (einige) Designmetadaten
Modus für hohen Kontrast Alternative Ressourcen für hohen Kontrast
Benötigen mehrere Ressourcen für verschiedene DPI-Modi Auswählbare Ressourcen mit vektorbasiertem Fallback
Duplizieren von Bildern Ein Bezeichner pro Bildkonzept

Warum sollte der Image Service verwendet werden?

  • Holen Sie sich immer das neueste „pixelgenaue“ Bild von Visual Studio.

  • Sie können Eigene Bilder übermitteln und verwenden.

  • Sie müssen Ihre Bilder nicht testen, wenn Windows eine neue DPI-Skalierung hinzufügt.

  • Nehmen Sie alte Architekturhürden in Ihren Implementierungen an

    Die Symbolleiste der Visual Studio-Shell vor und nach der Verwendung des Image Service:

    Image Service Vorher und Nachher

Funktionsweise

Der Image Service kann ein Bitmapbild bereitstellen, das für jedes unterstützte Benutzeroberflächenframework geeignet ist:

  • WPF: BitmapSource

  • WinForms: System.Drawing.Bitmap

  • Win32: HBITMAP

    Flussdiagramm für Image Service

    Flussdiagramm für Image Service

    Bildmoniker

    Ein Bildmoniker (oder Moniker für kurze Zeit) ist ein GUID/ID-Paar, das ein Bildobjekt oder eine Bildlistenressource in der Bildbibliothek eindeutig identifiziert.

    Bekannte Moniker

    Der Satz von Bildmonikern, die im Visual Studio-Bildkatalog enthalten sind und von einer beliebigen Visual Studio-Komponente oder -Erweiterung öffentlich verwendet werden.

    Bildmanifestdateien

    Bildmanifestdateien (IMAGEMANIFEST)-Dateien sind XML-Dateien, die einen Satz von Bildressourcen, die Moniker definieren, die diese Ressourcen darstellen, und das reale Bild oder Bilder, die die einzelnen Objekte darstellen. Bildmanifeste können eigenständige Bilder oder Bildlisten für Vorversion-Benutzeroberflächenunterstützung definieren. Darüber hinaus gibt es Attribute, die entweder für das Objekt oder für die einzelnen Bilder hinter den einzelnen Objekten festgelegt werden können, um zu ändern, wann und wie diese Ressourcen angezeigt werden.

    Bildmanifestschema

    Ein vollständiges Bildmanifest sieht wie folgt aus:

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

Symbols

Als Hilfe für die Lesbarkeit und Wartung kann das Bildmanifest Symbole für Attributwerte verwenden. Symbole werden wie folgt definiert:

<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>
Unterelement Definition
Importieren Importiert die Symbole der angegebenen Manifestdatei für die Verwendung im aktuellen Manifest.
Guid Das Symbol stellt eine GUID dar und muss mit der GUID-Formatierung übereinstimmen.
Kennung Das Symbol stellt eine ID dar und muss eine nicht-negative ganze Zahl sein.
String Das Symbol stellt einen beliebigen Zeichenfolgenwert dar.

Bei Symbolen wird die Groß-/Kleinschreibung beachtet und mithilfe der Syntax $(symbol-name) verwiesen:

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

Einige Symbole sind für alle Manifeste vordefiniert. Diese können im URI-Attribut des <Quellen> - oder <Import-Elements> verwendet werden, um auf Pfade auf dem lokalen Computer zu verweisen.

Symbol Beschreibung
CommonProgramFiles Der Wert der %CommonProgramFiles% Umgebungsvariable.
LocalAppData Der Wert der %LocalAppData% Umgebungsvariablen.
ManifestFolder Der Ordner, der die Manifestdatei enthält.
MyDocuments Der vollständige Pfad des Ordners Eigene Dokumente des aktuellen Benutzers
ProgramFiles Der Wert der %ProgramFiles% Umgebungsvariableneigenschaft.
System Der Windows\System32-Ordner.
WinDir Der Wert der %WinDir% Umgebungsvariablen.

Abbildung

Das <Image-Element> definiert ein Bild, auf das von einem Moniker verwiesen werden kann. Die GUID und DIE ID bilden zusammen den Bildmoniker. Der Moniker für das Bild muss in der gesamten Bildbibliothek eindeutig sein. Wenn mehr als ein Bild einen bestimmten Namen hat, wird das erste Bild, das beim Aufbau der Bibliothek gefunden wird, beibehalten.

Es muss mindestens eine Quelle enthalten. Größenneutrale Quellen liefern die besten Ergebnisse für eine breite Palette von Größen, aber sie sind nicht erforderlich. Wenn der Dienst nach einem Bild einer Größe gefragt wird, das nicht im <Image>-Element definiert ist und keine größenneutrale Quelle vorhanden ist, wählt der Dienst die beste größenspezifische Quelle aus und skaliert sie auf die angeforderte Größe.

<Image Guid="guid" ID="int" AllowColorInversion="true/false">
      <Source ... />
      <!-- optional additional Source elements -->
</Image>
Attribut Definition
Guid [Erforderlich] Der GUID-Teil des Bildmonikers
Kennung [Erforderlich] Der ID-Teil des Bildmonikers
AllowColorInversion [Optional; Standard true] Gibt an, ob das Bild seine Farben programmgesteuert invertiert haben kann, wenn es auf einem dunklen Hintergrund verwendet wird.

Quelle

Das <Source>-Element definiert eine einzelne Bildquellressource (XAML und PNG).

<Source Uri="uri" Background="background">
      <!-- optional NativeResource element -->
 </Source>
Attribut Definition
Uri [Erforderlich] Ein URI, der definiert, wo das Bild geladen werden kann. Folgende Werte sind möglich:

- Ein Paket-URI, das die application:/// Autorität einsetzt
- Eine absolute Referenz zur Komponentenressource
- Ein Pfad zu einer Datei, die eine systemeigene Ressource enthält
Hintergrund [Optional] Gibt an, welche Art von Hintergrund die Quelle verwenden soll.

Folgende Werte sind möglich:

Hell: Die Quelle kann auf einem hellen Hintergrund verwendet werden.

Dunkel: Die Quelle kann auf einem dunklen Hintergrund verwendet werden.

Hoher Kontrast: Die Quelle kann auf jedem Hintergrund im Modus Hoher Kontrast verwendet werden.

Hoher Kontrast, hell: Die Quelle kann auf einem hellen Hintergrund im Modus Hoher Kontrast verwendet werden.

Hoher Kontrast, dunkel: Die Quelle kann im Modus Hoher Kontrast auf einem dunklen Hintergrund verwendet werden.

Wenn das Background-Attribut nicht angegeben wird, kann die Quelle auf einem beliebigen Hintergrund verwendet werden.

Wenn Der Hintergrund Hell, Dunkel, Hoher Kontrast, hell, oder Hoher Kontrast, dunkel, ist, werden die Farben der Quelle nie umgekehrt. Wenn der Hintergrund nicht angegeben oder auf HighContrast festgelegt ist, wird die Inversion der Farben der Quelle durch das AllowColorInversion-Attribut des Bilds gesteuert.

Ein <Quellenelement> kann genau eines der folgenden optionalen Unterelemente aufweisen:

Element Attribute (alle erforderlich) Definition
<Größe> Wert Die Quelle wird für Bilder der angegebenen Größe (in Geräteeinheiten) verwendet. Das Bild ist quadratisch.
<SizeRange> MinSize, MaxSize Die Quelle wird für Bilder von MinSize in MaxSize (in Geräteeinheiten) einschließlich verwendet. Das Bild ist quadratisch.
<Dimensionen> Width, Height Die Quelle wird für Bilder der angegebenen Breite und Höhe (in Geräteeinheiten) verwendet.
<DimensionRange> MinWidth, MinHeight,

MaxWidth, MaxHeight
Die Quelle wird für Bilder von der Mindestbreite/Höhe bis zur maximalen Breite/Höhe (in Geräteeinheiten) einschließlich verwendet.

Ein <Quellenelement> kann auch über ein optionales <NativeResource-Unterelement> verfügen, das eine <Quelle> definiert, die aus einer systemeigenen Assembly und nicht aus einer verwalteten Assembly geladen wird.

<NativeResource Type="type" ID="int" />
Attribut Definition
type [Erforderlich] Der Typ der nativen Ressource, entweder XAML oder PNG
Kennung [Erforderlich] Der ganzzahlige ID-Teil der nativen Ressource

ImageList

Das <ImageList>-Element definiert eine Auflistung von Bildern, die in einem einzelnen Streifen zurückgegeben werden können. Der Streifen ist nach Bedarf aufgebaut.

<ImageList>
      <ContainedImage Guid="guid" ID="int" External="true/false" />
      <!-- optional additional ContainedImage elements -->
 </ImageList>
Attribut Definition
Guid [Erforderlich] Der GUID-Teil des Bildmonikers
Kennung [Erforderlich] Der ID-Teil des Bildmonikers
Extern [Optional, Standard false] Gibt an, ob der Bildmoniker auf ein Bild im aktuellen Manifest verweist.

Der Moniker für das enthaltene Bild muss nicht auf ein im aktuellen Manifest definiertes Bild verweisen. Wenn das enthaltene Bild in der Bildbibliothek nicht gefunden werden kann, wird ein leeres Platzhalterbild an seiner Stelle verwendet.

Verwenden des Image Service

Erste Schritte (verwaltet)

Um den Image Service zu verwenden, müssen Sie dem Projekt Referenzen auf einige oder alle folgenden Assemblys hinzufügen:

  • Microsoft.VisualStudio.ImageCatalog.dll

    • Erforderlich, wenn Sie den integrierten Bildkatalog KnownMonikers verwenden.
  • Microsoft.VisualStudio.Imaging.dll

    • Erforderlich, wenn Sie CrispImage und ImageThemingUtilities in Der WPF-Benutzeroberfläche verwenden.
  • Microsoft.VisualStudio.Imaging.Interop.14.0.DesignTime.dll

    • Erforderlich, wenn Sie die ImageMoniker und ImageAttributes-Typen verwenden.

    • EmbedInteropTypes sollte auf true festgelegt werden.

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

    • Erforderlich, wenn Sie den IVsImageService2-Typ verwenden.

    • EmbedInteropTypes sollte auf true festgelegt werden.

  • Microsoft.VisualStudio.Utilities.dll

    • Erforderlich, wenn Sie BrushToColorConverter für ImageThemingUtilities.ImageBackgroundColor in der WPF-Benutzeroberfläche verwenden.
  • Microsoft.VisualStudio.Shell.<VSVersion>.0

    • Erforderlich, wenn Sie den IVsUIObject-Typ verwenden.
  • Microsoft.VisualStudio.Shell.Interop.10.0.dll

    • Erforderlich, wenn Sie winForms-bezogene Hilfsprogramme für Benutzeroberflächen verwenden.

    • EmbedInteropTypes sollte auf true festgelegt werden.

Erste Schritte (native)

Um den Image Servicer zu verwenden, müssen Sie dem Projekt einige oder alle der folgenden Header hinzufügen:

  • KnownImageIds.h

    • Erforderlich, wenn Sie den integrierten Bildkatalog KnownMonikers verwenden, aber den ImageMoniker-Typ nicht verwenden können, z. B. wenn Werte aus IVsHierarchy GetGuidProperty oder GetProperty-Aufrufen zurückgegeben werden.
  • KnownMonikers.h

    • Erforderlich, wenn Sie den integrierten Bildkatalog KnownMonikers verwenden.
  • ImageParameters140.h

    • Erforderlich, wenn Sie die ImageMoniker und ImageAttributes-Typen verwenden.
  • VSShell140.h

    • Erforderlich, wenn Sie den IVsImageService2-Typ verwenden.
  • ImageThemingUtilities.h

    • Erforderlich, wenn Sie das Theming nicht dem Image Service überlassen können.

    • Verwenden Sie diesen Header nicht, wenn der Image Service ihr Bilddesign verarbeiten kann.

  • VsDpiAwareness.h

    • Erforderlich, wenn Sie die Hilfsprogramme, die mit DPI-Werten kompatibel sind, verwenden, um den aktuellen DPI-Wert zu erhalten.

Gewusst wie: Neue WPF-Benutzeroberfläche schreiben

  1. Fügen Sie zunächst die Assemblyreferenzen hinzu, die im Abschnitt Erste Schritte aufgeführt und für Ihr Projekt erforderlich sind. Sie müssen nicht alle hinzufügen. Fügen Sie also nur die benötigten Referenzen hinzu. (Hinweis: Wenn Sie Zugriff auf Farben statt Pinsel haben, können Sie dann den Verweis auf Dienstprogramme überspringen, da Sie den Konverter nicht benötigen.)

  2. Wählen Sie das gewünschte Bild aus, und rufen Sie den Moniker ab. Verwenden Sie einen KnownMoniker, oder verwenden Sie eigene, wenn Sie eigene benutzerdefinierte Bilder und Moniker haben.

  3. Fügen Sie CrispImages zu Ihrer XAML hinzu. (Siehe das folgende Beispiel.)

  4. Legen Sie die ImageThemingUtilities.ImageBackgroundColor-Eigenschaft in Ihrer Benutzeroberflächenhierarchie fest. (Dies sollte an dem Standort festgelegt werden, an dem die Hintergrundfarbe bekannt ist, nicht unbedingt auf CrispImage.) (Siehe Beispiel unten.)

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

Gewusst wie: vorhandene WPF-Benutzeroberfläche aktualisieren?

Das Aktualisieren einer vorhandenen WPF-Benutzeroberfläche ist ein relativ einfacher Prozess, der aus drei grundlegenden Schritten besteht:

  1. Ersetzen Sie alle <Bild>-Elemente in Ihrer Benutzeroberfläche durch <CrispImage>-Elemente.

  2. Ändern Sie alle Quellattribute in Moniker-Attribute.

    • Wenn sich das Bild nie ändert und Sie KnownMonikers verwenden, binden Sie diese Eigenschaft statisch an den KnownMoniker. (Sie das obige Beispiel.)

    • Wenn sich das Bild nie ändert und Sie ihr eigenes benutzerdefiniertes Bild verwenden, binden Sie sie statisch an Ihren eigenen Moniker.

    • Wenn sich das Bild ändern kann, binden Sie das Moniker-Attribut an eine Codeeigenschaft, die bei Eigenschaftenänderungen benachrichtigt wird.

  3. Legen Sie an einer beliebigen Stelle in der Benutzeroberflächenhierarchie ImageThemingUtilities.ImageBackgroundColor fest, um sicherzustellen, dass die Farbinversion ordnungsgemäß funktioniert.

    • Dies kann die Verwendung der BrushToColorConverter-Klasse erfordern. (Sie das obige Beispiel.)

Gewusst wie: Win32-Benutzeroberfläche aktualisieren?

Fügen Sie Ihrem Code nach Bedarf Folgendes hinzu, um das unformatierte Laden von Bildern zu ersetzen. Tauschen Sie die Werte für die Rückgabe von HBITMAPs gegen HICONs gegen HIMAGELIST je nach Bedarf.

Abrufen des Image Service

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

Anfordern des Bilds

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);

Gewusst wie: WinForms-Benutzeroberfläche aktualisieren?

Fügen Sie Ihrem Code nach Bedarf Folgendes hinzu, um das unformatierte Laden von Bildern zu ersetzen. Wechseln Sie Werte für die Rückgabe von Bitmaps im Vergleich zu Symbolen nach Bedarf.

Hilfreiche Verwendung von Anweisungen

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

Abrufen des Image Service

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

Absichern des Bildes

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

Gewusst wie: Bildmoniker in einem neuen Toolfenster verwenden?

Die VSIX-Paketprojektvorlage wurde für Visual Studio 2015 aktualisiert. Zum Erstellen eines neuen Toolfensters klicken Sie mit der rechten Maustaste auf das VSIX-Projekt, und wählen Sie Neues Element>hinzufügen (Strg+Umschalt+A). Wählen Sie unter dem Node Erweiterbarkeit für die Projektsprache das Benutzerdefiniertes Tool-Fenster aus, geben Sie dem Toolfenster einen Namen, und drücken Sie die Schaltfläche Hinzufügen.

Dies sind die wichtigsten Orte für die Verwendung von Monikern in einem Toolfenster. Befolgen Sie die Anweisungen für jedes:

  1. Die Registerkarte Toolfenster, wenn die Registerkarten klein genug sind (auch im Umschalter des Strg+Tab-Fensters verwendet).

    Fügen Sie diese Zeile zum Konstruktor für die Klasse hinzu, die vom ToolWindowPane-Typ abgeleitet wird:

    // Replace this KnownMoniker with your desired ImageMoniker
    this.BitmapImageMoniker = KnownMonikers.Blank;
    
  2. Der Befehl zum Öffnen des Toolfensters.

    Bearbeiten Sie in der .vsct Datei für das Paket die Befehlsschaltfläche des Toolfensters:

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

    Stellen Sie sicher, dass Folgendes auch am Anfang der Datei vorhanden ist, nach den <Extern> Elementen:

    <Include href="KnownImageIds.vsct"/>
    

Gewusst wie: Bildmoniker in einem vorhandenen Toolfenster verwenden?

Das Aktualisieren eines vorhandenen Toolfensters zur Verwendung von Bildmonikern ähnelt den Schritten zum Erstellen eines neuen Toolfensters.

Dies sind die wichtigsten Orte für die Verwendung von Monikern in einem Toolfenster. Befolgen Sie die Anweisungen für jedes:

  1. Die Registerkarte Toolfenster, wenn die Registerkarten klein genug sind (auch im Umschalter des Strg+Tab-Fensters verwendet).

    1. Entfernen Sie diese Zeilen (falls vorhanden) im Konstruktor für die Klasse, die vom ToolWindowPane-Typ abgeleitet wird:

      this.BitmapResourceID = <Value>;
      this.BitmapIndex = <Value>;
      
    2. Siehe Schritt Nr. 1 des Abschnitts „Gewusst wie: Bildmoniker in einem neuen Toolfenster verwenden?“ weiter oben.

  2. Der Befehl zum Öffnen des Toolfensters.

    • Siehe Schritt Nr. 2 des Abschnitts „Gewusst wie: Bildmoniker in einem neuen Toolfenster verwenden?“ weiter oben.

Gewusst wie: Bildmoniker in einer VSCT-Datei verwenden?

Aktualisieren Sie Ihre .vsct Datei wie in den kommentierten Zeilen unten angegeben:

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

Was geschieht, wenn meine VSCT-Datei auch von älteren Versionen von Visual Studio gelesen werden muss?

Ältere Versionen von Visual Studio erkennen das IconIsMoniker-Befehlskennzeichen nicht. Sie können Bilder aus dem Image Service in Versionen von Visual Studio verwenden, die diesen Dienst unterstützen, aber Sie können weiterhin Bilder im alten Stil in älteren Versionen von Visual Studio verwenden. Dazu lassen Sie die .vsct Datei unverändert (und sind daher kompatibel mit älteren Versionen von Visual Studio) und erstellen eine CSV-Datei (durch Trennzeichen getrennte Werte), die GUID/ID-Paare, die im .vsctBitmaps<-Element einer >-Datei definiert sind, auf GUID/ID-Paare für Bildmoniker abbildet.

Das Format der CSV-Zuordnungsdatei lautet:

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

Die CSV-Datei wird mit dem Paket bereitgestellt, und ihr Speicherort wird durch die IconMappingFilename-Eigenschaft des ProvideMenuResource-Paketattributes angegeben:

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

Der IconMappingFilename ist entweder ein relativer Pfad, der implizit auf $PackageFolder$ verweist (wie im Beispiel oben dargestellt) oder ein absoluter Pfad, der explizit auf ein durch eine Umgebungsvariable definiertes Verzeichnis verweist, z. B. @"%UserProfile%\dir1\dir2\MyMappingFile.csv".

Gewusst wie: Portierung eines Projektsystems?

Bereitstellen von ImageMonikers für ein Projekt

  1. Implementieren Sie VSHPROPID_SupportsIconMonikers für die IVsHierarchy des Projekts, und geben Sie true zurück.

  2. Implementieren Sie entweder VSHPROPID_IconMonikerImageList (wenn das ursprüngliche Projekt VSHPROPID_IconImgList verwendet hat) oder VSHPROPID_IconMonikerGuid, VSHPROPID_IconMonikerId, VSHPROPID_OpenFolderIconMonikerGuid, VSHPROPID_OpenFolderIconMonikerId (wenn das ursprüngliche Projekt VSHPROPID_IconHandle und VSHPROPID_OpenFolderIconHandle verwendet hat ).

  3. Ändern Sie die Implementierung der ursprünglichen VSHPROPIDs für Symbole, um ältere Versionen der Symbole zu erstellen, wenn Erweiterungspunkte sie anfordern. IVsImageService2 bietet Funktionen, die zum Abrufen dieser Symbole erforderlich sind.

    Zusätzliche Anforderungen für VB/C#-Projektvarianten

    Implementieren Sie nur VSHPROPID_SupportsIconMonikers, wenn Sie feststellen, dass Ihr Projekt die äußerste Variante ist. Andernfalls unterstützt die eigentliche äußerste Variante Bildmoniker in Wirklichkeit möglicherweise nicht, und Ihre Basisvariante kann effektiv angepasste Bilder „ausblenden“.

    Gewusst wie: Bildmoniker in CPS verwenden?

    Das Festlegen von benutzerdefinierten Bildern in CPS (Common Project System) kann manuell oder über eine Elementvorlage erfolgen, die im Project System Extensibility SDK enthalten ist.

    Verwenden des Project System Extensibility SDK

    Folgen Sie den Anweisungen unter Bereitstellen von benutzerdefinierten Symbolen für den Projekttyp/Elementtyp, um Ihre CPS-Bilder anzupassen. Weitere Informationen zu CPS finden Sie in der Dokumentation zur Erweiterbarkeit von Visual Studio Project System

    Manuelles Verwenden von ImageMonikers

  4. Implementieren und exportieren Sie die IProjectTreeModifier-Schnittstelle in Ihrem Projektsystem.

  5. Bestimmen Sie, welche KnownMoniker oder benutzerdefinierte Bildmoniker Sie verwenden möchten.

  6. Führen Sie in der ApplyModifications-Methode die folgenden Schritte in der Methode aus, bevor Sie die neue Struktur zurückgeben, ähnlich wie im folgenden Beispiel:

    // Replace this KnownMoniker with your desired ImageMoniker
    tree = tree.SetIcon(KnownMonikers.Blank.ToProjectSystemType());
    
  7. Wenn Sie eine neue Struktur erstellen, können Sie die benutzerdefinierten Bilder festlegen, indem Sie die gewünschten Moniker an die NewTree-Methode übergeben, ähnlich wie im folgenden Beispiel:

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

Gewusst wie: Konvertierung von einem echten Bildstreifen in einen monikerbasierten Bildstreifen?

Ich muss HIMAGELISTs unterstützen

Wenn für Ihren Code bereits ein Bildstreifen vorhanden ist, den Sie aktualisieren möchten, um den Image Service zu verwenden und Sie durch APIs eingeschränkt sind, die eine Übergabe von Bildlisten erfordern, können Sie dennoch die Vorteile des Image Service nutzen. Führen Sie zum Erstellen eines monikerbasierten Bildstreifens die folgenden Schritte aus, um ein Manifest aus vorhandenen Monikern zu erstellen.

  1. Führen Sie das ManifestFromResources-Tool aus und übergeben Sie es an den Bildstreifen. Dadurch wird ein Manifest für den Streifen generiert.

    • Empfohlen: Geben Sie einen nicht standardmäßigen Namen für das Manifest an, der seiner Verwendung entspricht.
  2. Wenn Sie nur KnownMonikers verwenden, gehen Sie wie folgt vor:

    • Ersetzen Sie den Abschnitt <Bilder> des Manifests durch <Bilder/>.

    • Entfernen Sie alle Unterbild-IDs (alles mit <imagestrip name>_##).

    • Empfohlen: Benennen Sie das Symbol AssetsGuid und das Bildstreifensymbol entsprechend ihrer Verwendung um.

    • Ersetzen Sie die GUID jedes ContainedImage durch $(ImageCatalogGuid), ersetzen Sie die ID jedes ContainedImage durch $(<moniker>), und fügen Sie das External="true"-Attribut zu jedem ContainedImage hinzu.

      • <moniker> sollte durch den KnownMoniker ersetzt werden, der dem Bild entspricht, aber mit den „KnownMonikers“ aus dem Namen entfernt.
    • Fügen Sie <Import Manifest="$(ManifestFolder)\<Relative install dir path to *>\Microsoft.VisualStudio.ImageCatalog.imagemanifest" /*> am Anfang des Abschnitts <Symbole> hinzu.

      • Der relative Pfad wird durch den Bereitstellungsort bestimmt, der in der Setuperstellung für das Manifest definiert ist.
  3. Führen Sie das ManifestToCode-Tool aus, um Wrapper zu generieren, damit der vorhandene Code über einen Moniker verfügt, mit dem der Image Service für die Bildleiste abgefragt werden kann.

    • Empfohlen: Stellen Sie nicht standardmäßige Namen für die Wrapper und Namespaces entsprechend ihrer Verwendung bereit.
  4. Führen Sie alle Hinzugefügten, Setuperstellungs-/Bereitstellungsänderungen und andere Codeänderungen für die Arbeit mit dem Image Service und den neuen Dateien durch.

    Beispielmanifest, einschließlich interner und externer Bilder, um zu sehen, wie es aussehen soll:

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

Ich muss HIMAGELISTs nicht unterstützen

  1. Bestimmen Sie den Satz von KnownMonikers, die den Bildern in Ihrem Bildstreifen entsprechen, oder erstellen Sie eigene Moniker für die Bilder in Ihrem Bildstreifen.

  2. Aktualisieren Sie die Zuordnung, die Sie zum Abrufen des Bilds am erforderlichen Index in der Bildleiste verwendet haben, um stattdessen die Moniker zu verwenden.

  3. Aktualisieren Sie Ihren Code so, dass der Image Service verwendet wird, um Moniker über die aktualisierte Zuordnung anzufordern. (Dies kann bedeuten, dass eine Aktualisierung auf CrispImages für verwalteten Code oder das Anfordern von HBITMAPs oder HICONs aus dem Image Service und Übergeben für nativen Code.)

Testen Ihrer Bilder

Sie können das Bildbibliotheks-Viewer-Tool verwenden, um Ihre Bildmanifeste zu testen, um sicherzustellen, dass alles korrekt erstellt wurde. Sie finden das Tool im Visual Studio 2015 SDK. Die Dokumentation für dieses Tool finden Sie hier.

Zusätzliche Ressourcen

Beispiele

Einige der Visual Studio-Beispiele auf GitHub wurden aktualisiert, um zu zeigen, wie der Image Service als Teil verschiedener Visual Studio-Erweiterbarkeitspunkte verwendet wird.

Überprüfen Sie http://github.com/Microsoft/VSSDK-Extensibility-Samples für die neuesten Beispiele.

Tools

Es wurde eine Reihe von Supporttools für den Image Service erstellt, um das Erstellen/Aktualisieren der Benutzeroberfläche zu unterstützen, die mit dem Image Service funktioniert. Weitere Informationen zu den einzelnen Tools finden Sie in der Dokumentation, die im Lieferumfang der Tools enthalten ist. Die Tools sind als Teil des Visual Studio 2015 SDK enthalten.

ManifestFromResources

Das Tool Manifest from Resources verwendet eine Liste von Bildressourcen (PNG oder XAML) und generiert eine Bildmanifestdatei für die Verwendung dieser Bilder mit dem Image Service.

ManifestToCode

Das Tool Manifest to Code verwendet eine Bildmanifestdatei und generiert eine Wrapperdatei zum Verweisen auf die Manifestwerte in Code (C++, C#oder VB) oder .vsct Dateien.

ImageLibraryViewer

Das Tool Image Library Viewer kann Bildmanifeste laden und es dem Benutzer ermöglichen, sie auf die gleiche Weise wie Visual Studio zu bearbeiten, um sicherzustellen, dass das Manifest ordnungsgemäß erstellt wurde. Der Benutzer kann Hintergrund, Größen, DPI-Einstellung, hohen Kontrast und andere Einstellungen ändern. Außerdem werden Ladeinformationen angezeigt, um Fehler in den Manifesten zu finden und Quellinformationen für jedes Bild im Manifest anzuzeigen.

Häufig gestellte Fragen

  • Gibt es Abhängigkeiten, die Sie beim Laden von <Referenz Include="Microsoft.VisualStudio.*.Interop.14.0.DesignTime" />einschließen müssen?

    • Legen Sie EmbedInteropTypes="true" für alle Interop-DLLs fest.
  • Gewusst wie: ein Imagemanifest mit meiner Erweiterung bereitstellen?

    • Fügen Sie dem Projekt die .imagemanifest Datei hinzu.

    • Legen Sie „Include in VSIX“ auf TRUE fest.

  • Ich aktualisiere mein CPS Projekt System. Was ist mit ImageName und StockIconService passiert?

    • Diese wurden entfernt, als CPS aktualisiert wurde, um Moniker zu verwenden. Sie müssen den StockIconService nicht mehr aufrufen, sondern einfach den gewünschten KnownMoniker an die Methode oder Eigenschaft übergeben, indem Sie die ToProjectSystemType() -Erweiterungsmethode in den CPS-Dienstprogrammen verwenden. Sie finden eine Zuordnung von ImageName zu KnownMonikers unten:

      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
    • Ich aktualisiere meinen Vervollständigungslistenanbieter. Welche KnownMonikers stimmen mit den alten Werten von StandardGlyphGroup und StandardGlyph überein?

      Name Name Name
      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 EnumerationPublic
      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 NamespaceInternal
      GlyphGroupNamespace GlyphItemFriend NamespaceInternal
      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 NamespaceInternal
      GlyphGroupJSharpNamespace GlyphItemFriend NamespaceInternal
      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 Verweis
      GlyphLibrary Bibliothek
      GlyphVBProject VBProjectNode
      GlyphCoolProject CSProjectNode
      GlyphCppProject CPPProjectNode
      GlyphDialogId Dialogfeld
      GlyphOpenFolder FolderOpened
      GlyphClosedFolder FolderClosed
      GlyphArrow GoToNext
      GlyphCSharpFile CSFileNode
      GlyphCSharpExpansion Ausschnitt
      GlyphKeyword IntellisenseKeyword
      GlyphInformation StatusInformation
      GlyphReference ClassMethodReference
      GlyphRecursion Rekursion
      GlyphXmlItem Tag
      GlyphJSharpProject DocumentCollection
      GlyphJSharpDocument Dokument
      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