Freigeben über


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 Bilddienst 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. Durch die Einführung des Bilddiensts werden wichtige Probleme im Zusammenhang mit der Ressourcenwartung, der HDPI-Skalierung und dem Design beseitigt.

Probleme heute Lösungen
Farbmischung im Hintergrund Integrierte Alphamischung
Thematisierung (einiger) Bilder Themenmetadaten
Modus "Hoher Kontrast" Alternative Ressourcen für hohen Kontrast
Benötigen Sie mehrere Ressourcen für verschiedene DPI-Modi Auswählbare Ressourcen mit vektorbasiertem Fallback
Doppelte Bilder Ein Bezeichner pro Bildkonzept

Warum sollte der Imagedienst 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.

  • Überwinden Sie alte architektonische Hürden in Ihren Implementierungen

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

    Bilddienst Vorher und Nachher

Funktionsweise

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

  • WPF: BitmapSource

  • WinForms: System.Drawing.Bitmap

  • Win32: HBITMAP

    Bilddienstflussdiagramm

    Diagramm des Bilddienstablaufs

    Bildmoniker

    Ein Bildmoniker (oder einfach Moniker) ist ein GUID/ID-Paar, das eine Bilddatei oder ein Bildlistenobjekt in der Bildbibliothek eindeutig identifiziert.

    Bekannte Bezeichnungen

    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) sind XML-Dateien, die einen Satz von Bildressourcen, die Moniker, die diese Ressourcen darstellen, und das reale Bild oder die Bilder, die die einzelnen Ressourcen repräsentieren, definieren. Bildmanifeste können eigenständige Bilder oder Bildlisten für legacy-UI-Unterstü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>

Symbole

Als Lesbarkeits- und Wartungshilfe 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" />
      <!-- 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>
Unterelement Definition
Importieren Importiert die Symbole der angegebenen Manifestdatei für die Verwendung im aktuellen Manifest.
Leitfaden Das Symbol stellt eine GUID dar und muss mit der GUID-Formatierung übereinstimmen.
ID 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ß- und Kleinschreibung beachtet und sie werden mithilfe der Syntax $(symbol-name) referenziert.

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

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

Symbol Beschreibung
CommonProgramFiles Der Wert der umgebungsvariablen %CommonProgramFiles%
LocalAppData Der Wert der umgebungsvariablen %LocalAppData%
ManifestFolder Der Ordner mit der Manifestdatei
MyDocuments Der vollständige Pfad des Ordners "Meine Dokumente" des aktuellen Benutzers
ProgramFiles Der Wert der umgebungsvariablen %ProgramFiles%
System Der Ordner "Windows\System32 "
WinDir Der Wert der umgebungsvariablen %WinDir%

Bild

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

Sie 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 es auf die angeforderte Größe.

<Image Guid="guid" ID="int" AllowColorInversion="true/false">
      <Source ... />
      <!-- optional additional Source elements -->
</Image>
Attribut Definition
Leitfaden [Erforderlich] Der GUID-Teil des Bildmonikers
ID [Erforderlich] Der ID-Teil des Bildmonikers
FarbumkehrungErlauben [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, von wo das Bild geladen werden kann. Dies kann eine der folgenden Aktionen sein:

- Ein Pack-URI mit der application:/// Autorität
- Ein absoluter Komponentenressourcenverweis
– Ein Pfad zu einer Datei, die eine systemeigene Ressource enthält
Hintergrund Gibt an, auf welcher Art von Hintergrund die Quelle verwendet werden soll.

Dies kann eine der folgenden Aktionen sein:

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

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

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

HighContrastLight: Die Quelle kann im Modus "Hoher Kontrast" auf einem hellen Hintergrund verwendet werden.

HighContrastDark: 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, HighContrastLight oder HighContrastDark ist, werden die Farben der Quelle nie umgekehrt. Wenn "Background" nicht angegeben oder auf "HighContrast" festgelegt ist, wird die Inversion der Farben der Quelle durch das AllowColorInversion-Attribut des Bilds gesteuert.

Ein <Source-Element> 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.
<Größenbereich> MinSize, MaxSize Die Quelle wird für Bilder von MinSize bis MaxSize in Geräteeinheiten verwendet. Das Bild ist quadratisch.
<Dimensionen> Breite, Höhe Die Quelle wird für Bilder der angegebenen Breite und Höhe (in Geräteeinheiten) verwendet.
<Dimensionsbereich> 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 <Source-Element> 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
Typ [Erforderlich] Der Typ der nativen Ressource, entweder XAML oder PNG
ID [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 wird nach Bedarf aufgebaut.

<ImageList>
      <ContainedImage Guid="guid" ID="int" External="true/false" />
      <!-- optional additional ContainedImage elements -->
 </ImageList>
Attribut Definition
Leitfaden [Erforderlich] Der GUID-Teil des Bildmonikers
ID [Erforderlich] Der ID-Teil des Bildmonikers
External [Optional, Standardwert 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 Bilddiensts

Erste Schritte (verwaltet)

Um den Imagedienst zu verwenden, müssen Sie dem Projekt Verweise 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 UI-Hilfsprogramme verwenden.

    • EmbedInteropTypes sollte auf "true" festgelegt werden.

Erste Schritte (native)

Um den Bilddienst zu verwenden, müssen Sie einige oder alle der folgenden Kopfzeilen in Ihr Projekt einschließen:

  • 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 der Imagedienst das Thema nicht für Sie verarbeiten kann.

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

  • VsDpiAwareness.h

    • Erforderlich, wenn Sie die DPI-Bewusstseinshelfer verwenden, um den aktuellen DPI-Wert abzurufen.

Wie schreibe ich neue WPF-Benutzeroberfläche?

  1. Fügen Sie zunächst die in den obigen ersten Schritten genannten Assembly-Verweise zu Ihrem Projekt hinzu. Sie müssen nicht alle hinzufügen. Fügen Sie also nur die benötigten Verweise hinzu. (Hinweis: Wenn Sie anstelle von Pinsel auf Farben zugreifen oder Zugriff haben, können Sie 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 Bezeichner ab. Verwenden Sie einen KnownMoniker, oder verwenden Sie Eigene, wenn Sie eigene benutzerdefinierte Bilder und Moniker haben.

  3. Fügen Sie CrispImages zu Ihrem XAML hinzu. (Siehe unten beispiel.)

  4. Legen Sie die ImageThemingUtilities.ImageBackgroundColor-Eigenschaft in Ihrer UI-Hierarchie fest. (Dies sollte an der Position festgelegt werden, an der die Hintergrundfarbe bekannt ist, nicht unbedingt auf dem CrispImage.) (Siehe unten beispiel.)

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

Wie aktualisiere ich die vorhandene WPF-Benutzeroberfläche?

Das Aktualisieren vorhandener WPF-Ui ist ein relativ einfacher Prozess, der aus drei grundlegenden Schritten besteht:

  1. Ersetzen Sie alle <Bildelemente> 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. (Siehe das obige Beispiel.)

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

    • Wenn sich das Bild ändern kann, binden Sie das Moniker-Attribut an eine Codeeigenschaft, die über Änderungen der Eigenschaft benachrichtigt.

  3. Legen Sie an einer beliebigen Stelle in der UI-Hierarchie "ImageThemingUtilities.ImageBackgroundColor " fest, um sicherzustellen, dass die Farbinversion ordnungsgemäß funktioniert.

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

Wie aktualisiere ich die Win32-Benutzeroberfläche?

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

Abrufen des Imagediensts

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

Wie aktualisiere ich die WinForms-Benutzeroberfläche?

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

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

Den Bilderdienst aufrufen

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

Anfordern des Bilds

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

Wie verwende ich Bildmoniker in einem neuen Toolfenster?

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>" aus (STRG+UMSCHALT+A). Wählen Sie unter dem Knoten "Erweiterbarkeit" für die Projektsprache " Benutzerdefiniertes Toolfenster" aus, geben Sie dem Toolfenster einen Namen, und drücken Sie die Schaltfläche "Hinzufügen ".

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

  1. Die Registerkarte des Toolfensters, wenn die Registerkarten klein genug sind (wird auch im FensterumschalterStrg-Tab 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"/>
    

Wie verwende ich Bildmoniker in einem vorhandenen Toolfenster?

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 die einzelnen:

  1. Die Registerkarte des Werkzeugfensters, wenn die Tabs klein genug werden (auch im Fensterumschalter für Strg + Tab verwendet).

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

      this.BitmapResourceID = <Value>;
      this.BitmapIndex = <Value>;
      
    2. Siehe Schritt 1 des Abschnitts "Wie verwende ich Bildmoniker in einem neuen Toolfenster?".

  2. Der Befehl zum Öffnen des Toolfensters.

    • Siehe Schritt 2 des Abschnitts "Wie verwende ich Bildmoniker in einem neuen Toolfenster?".

Wie verwende ich Bildmoniker in einer VSCT-Datei?

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 Bilddienst in Versionen von Visual Studio verwenden, die es unterstützen, verwenden aber weiterhin Bilder im alten Stil in älteren Versionen von Visual Studio. Dazu lassen Sie die .vsct Datei unverändert (und daher kompatibel mit älteren Versionen von Visual Studio), und erstellen Sie eine CSV-Datei (durch Komma getrennte Werte), die GUID-/ID-Paare, die im .vsctBitmaps<-Element einer > Datei definiert sind, zu Bildmoniker-GUID-/ID-Paaren zuordnet.

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 im $PackageFolder$ verankert ist (wie im obigen Beispiel), oder ein absoluter Pfad, der explizit in einem Verzeichnis verankert ist, das durch eine Umgebungsvariable definiert wird, wie zum Beispiel @"%UserProfile%\dir1\dir2\MyMappingFile.csv".

Wie portiere ich ein Projektsystem?

So stellen Sie ImageMonikers für ein Projekt bereit

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

    Implementieren Sie VSHPROPID_SupportsIconMonikers nur, wenn Sie feststellen, dass Ihr Projekt der äußerste Flavor ist. Andernfalls unterstützt der eigentliche äußerste Geschmack bildmoniker in Wirklichkeit möglicherweise nicht, und Ihr Basisgeschmack kann effektiv angepasste Bilder "ausblenden".

    Wie verwende ich Bildmoniker in CPS?

    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. Legen Sie fest, welchen KnownMoniker oder Bildmoniker Ihrer Wahl 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 einen neuen Baum 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);
    

Wie kann ich von einem echten Bildstreifen in einen monikerbasierten Bildstreifen konvertieren?

Ich muss HIMAGELISTs unterstützen

Wenn für Ihren Code bereits ein Bildstreifen vorhanden ist, den Sie aktualisieren möchten, um den Bilddienst zu verwenden, Sie sind jedoch durch APIs eingeschränkt, die eine Übergabe von Bildlisten erfordern, können Sie dennoch die Vorteile des Bilddiensts nutzen. Um eine monikerbasierte Bildleiste zu erstellen, führen Sie die folgenden Schritte aus, um ein Manifest aus vorhandenen Monikern zu erstellen.

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

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

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

    • Entfernen Sie alle Subimage-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, wobei "KnownMonikers" aus dem Namen entfernt wird.
    • Fügen Sie <Import Manifest="$(ManifestFolder)\<relativer Installationsverzeichnispfad zu *>\Microsoft.VisualStudio.ImageCatalog.imagemanifest" /*> an den Anfang des <Symbols>-Abschnitts hinzu.

      • Der relative Pfad wird durch den Bereitstellungsort bestimmt, der in der Setup-Konfiguration 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 Bilddienst für die Bildleiste abgefragt werden kann.

    • Empfohlen: Stellen Sie nicht-standardmäßige Namen für die Wrapper und Namespaces bereit, um deren Verwendung anzupassen.
  4. Führen Sie alle Ergänzungen, Änderungen bei der Setup-Erstellung/Bereitstellung und andere Code-Änderungen durch, um mit dem Imagedienst und den neuen Dateien zu arbeiten.

    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 die Menge 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, um den Bilddienst zu verwenden und Moniker über die aktualisierte Zuordnung anzufordern. (Dies kann bedeuten, dass eine Aktualisierung auf CrispImages für verwalteten Code erfolgt oder dass HBITMAPs oder HICONs vom Bilddienst angefordert und für nativen Code weitergegeben werden.)

Prüfen 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. Dokumentation für dieses Tool und andere finden Sie hier.

Weitere Ressourcen

Beispiele

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

Sehen Sie sich http://github.com/Microsoft/VSSDK-Extensibility-Samples die neuesten Beispiele an.

Tooling

Es wurde eine Reihe von Supporttools für den Image-Dienst erstellt, um das Erstellen/Aktualisieren der Benutzeroberfläche zu unterstützen, die mit dem Image-Dienst 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 aus Ressourcen" verwendet eine Liste von Bildressourcen (PNG oder XAML) und generiert eine Bildmanifestdatei für die Verwendung dieser Bilder mit dem Bilddienst.

ManifestToCode

Das Tool "Manifest für 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 "Bildbibliotheksanzeige" 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 berücksichtigen müssen, wenn Sie <Reference Include="Microsoft.VisualStudio.*.Interop.14.0.DesignTime" /> laden?

    • Legen Sie EmbedInteropTypes="true" für alle Interop-DLLs fest.
  • Wie kann ich ein Imagemanifest mit meiner Erweiterung bereitstellen?

    • Fügen Sie die .imagemanifest Datei zu Ihrem Projekt hinzu.

    • Legen Sie "In VSIX einschließen" auf "True" fest.

  • Meine Bilder funktionieren immer noch nicht, wie kann ich herausfinden, was falsch ist?

    • Visual Studio findet ihr Bildmanifest möglicherweise nicht. Aus Leistungsgründen schränkt Visual Studio die Ordnersuchtiefe ein, daher wird empfohlen, dass das Bildmanifest im Stammordner Ihrer Erweiterung gespeichert wird.

    • Möglicherweise fehlen Assemblyinformationen in der Bildmanifestdatei. Assemblies, die stark benannt sind, benötigen zusätzliche Informationen, um von Visual Studio geladen zu werden. Um eine stark benannte Assembly zu laden, müssen Sie (zusätzlich zum Assemblynamen) die Assemblyversion und das Öffentliche Schlüsseltoken in die Ressourcen-URIs für die Bilder in Ihrem Imagemanifest einschließen.

      <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>
      
    • Möglicherweise fehlt ein Codebasiseintrag für die Imageassembly. Wenn Ihre Assembly zu dem Zeitpunkt, zu dem Visual Studio sie benötigt, noch nicht geladen ist, muss es wissen, wo es Ihre Assembly finden kann, um sie zu laden. Um ihrer Assembly eine Codebasis hinzuzufügen, können Sie mithilfe von ProvideCodeBaseAttribute sicherstellen, dass ein Codebasiseintrag generiert und in der pkgdef Ihrer Erweiterung enthalten ist.

      [assembly: ProvideCodeBase(AssemblyName = "ClassLibrary1", Version = "1.0.0.0", CodeBase = "$PackageFolder$\\ClassLibrary1.dll")]
      
    • Wenn das Problem beim Laden des Bilds durch die vorherigen Optionen nicht behoben wird, können Sie die Protokollierung aktivieren, indem Sie die folgenden Einträge in einer pkgdef-Datei in Ihrer Erweiterung ablegen:

      [$RootKey$\ImageLibrary]
      "TraceLevel"="Verbose"
      "TraceFilename"="ImageLibrary.log"
      

      Dadurch wird eine Protokolldatei namens ImageLibrary.log in Ihrem %UserProfile% Ordner erstellt. Führen Sie "devenv /updateConfiguration" aus einer Entwickler-Eingabeaufforderung aus, nachdem Sie diese Einträge zu einer pkgdef hinzugefügt haben. Dadurch wird sichergestellt, dass die Protokollierungseinträge aktiviert sind und vs den Bildmanifestcache aktualisiert, um Fehler zu finden, die beim Lesen des Bildmanifests auftreten können. Wenn Sie dann das Szenario durchlaufen, in dem ihr Bild geladen werden soll, enthält die Protokolldatei sowohl die Registrierungsprotokollierung als auch die Anforderungsprotokollierung für Ihr Bild.

  • Ich aktualisiert mein CPS Project 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, 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 BekannteBildIds.OrdnerGeöffnet
      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.ÖffneAusgeschlossenenOrdner KnownImageIds.VerborgenerOrdnerGeöffnet
      ImageName.ExcludedFile KnownImageIds.HiddenFile
      ImageName.DependentFile KnownImageIds.GenerateFile
      ImageName.FehlendeDatei 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.Einstellungsdatei
      ImageName.WebConfig KnownImageIds.Konfigurationsdatei
      ImageName.HtmlPage KnownImageIds.HTMLFile
      ImageName.StyleSheet KnownImageIds.StyleSheet
      ImageName.ScriptFile KnownImageIds.JSScript
      ImageName.Textdatei KnownImageIds.Document
      ImageName.Einstellungsdatei 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.Vorschaudatei KnownImageIds.Bericht
      ImageName.DanglingReference KnownImageIds.ReferenceWarning
      ImageName.XsltFile KnownImageIds.XSLTransform
      ImageName.Cursor KnownImageIds.CursorFile
      ImageName.AppDesignerFolder KnownImageIds.-Eigenschaft
      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.FehlenderOrdner 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 aktualisiert meinen Vervollständigungslistenanbieter. Welcher KnownMonikers entspricht den alten StandardGlyphGroup und StandardGlyph-Werten?

    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
    GlyphenGruppenDelegierter GlyphItemPublic DelegatePublic
    Glyphgruppen-Delegat 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 AufzählungsElementIntern
    GlyphGroupEnumMember GlyphItemFriend AufzählungsElementIntern
    GlyphGroupEnumMember GlyphItemProtected GeschütztesAufzählungselement
    GlyphGroupEnumMember GlyphItemPrivate EnumerationItemPrivate
    GlyphGroupEnumMember GlyphItemShortcut EnumerationElementVerknüpfung
    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 FeldGeschützt
    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 KartenelementGeschützt
    GlyphGroupMapElement GlyphItemPrivate MapItemPrivate
    GlyphGruppenKartenElement GlyphItemShortcut Kartenelement-Kurzbefehl
    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 ModuleGeschützt
    GlyphGroupModule GlyphItemPrivate ModulePrivate
    GlyphGroupModule GlyphItemShortcut ModuleShortcut
    GlyphGroupNamespace GlyphItemPublic NamespacePublic
    GlyphGroupNamespace GlyphItemInternal NamespaceInternal
    GlyphGroupNamespace GlyphItemFriend NamespaceInternal
    GlyphGroupNamespace GlyphElementGeschützt NamespaceProtected
    GlyphGroupNamespace GlyphItemPrivate NamespacePrivate
    GlyphGroupNamespace GlyphItemShortcut NamespaceShortcut
    GlyphGroupOperator GlyphItemPublic BetreiberÖffentlich
    GlyphGroupOperator GlyphItemInternal OperatorIntern
    GlyphGroupOperator GlyphItemFriend OperatorInternal
    GlyphGroupOperator GlyphItemProtected OperatorProtected
    GlyphGroupOperator GlyphItemPrivate OperatorPrivate
    GlyphGroupOperator GlyphItemShortcut OperatorShortcut
    GlyphGroupProperty GlyphItemPublic PropertyPublic
    GlyphGroupProperty GlyphItemInternal PropertyInternal
    GlyphGroupProperty GlyphItemFriend PropertyInternal
    GlyphGroupProperty GlyphItemProtected EigenschaftenGeschützt
    GlyphGroupProperty GlyphItemPrivate PropertyPrivate
    GlyphGroupProperty GlyphItemShortcut PropertyShortcut
    GlyphGroupStruct GlyphItemPublic StructurePublic
    GlyphGroupStruct GlyphItemInternal StructureInternal
    GlyphGroupStruct GlyphItemFriend StructureInternal
    GlyphGroupStruct GlyphItemProtected Strukturgeschützt
    GlyphGroupStruct GlyphItemPrivate StructurePrivate
    GlyphGroupStruct GlyphItemShortcut StructureShortcut
    GlyphGroupTemplate GlyphItemPublic TemplatePublic
    GlyphGroupTemplate GlyphItemInternal TemplateInternal
    GlyphGroupTemplate GlyphItemFriend TemplateInternal
    GlyphGroupTemplate GlyphItemProtected Vorlagengeschützt
    GlyphGroupTemplate GlyphItemPrivate TemplatePrivate
    GlyphGroupTemplate GlyphItemShortcut TemplateShortcut
    GlyphGroupTypedef GlyphItemPublic TypeDefinitionPublic
    GlyphGroupTypedef GlyphItemInternal TypeDefinitionInternal
    GlyphGroupTypedef GlyphItemFriend TypeDefinitionInternal
    GlyphGroupTypedef GlyphItemProtected TypeDefinitionGeschützt
    GlyphGroupTypedef GlyphItemPrivate TypeDefinitionPrivate
    GlyphGroupTypedef GlyphItemShortcut Typdefinitionsverknüpfung
    GlyphGroupType GlyphItemPublic TypePublic
    GlyphGroupType GlyphItemInternal TypeInternal
    GlyphGroupType GlyphItemFriend TypIntern
    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 FeldGeschützt
    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 ObjektGeschützt
    GlyphGroupIntrinsic GlyphItemPrivate ObjectPrivate
    GlyphGroupIntrinsic GlyphItemShortcut ObjectShortcut
    GlyphGroupJSharpMethod GlyphItemPublic MethodPublic
    GlyphGroupJSharpMethod GlyphItemInternal MethodInternal
    GlyphGroupJSharpMethod GlyphItemFriend MethodInternal
    GlyphGroupJSharpMethode GlyphItemProtected MethodProtected
    GlyphGroupJSharpMethod GlyphItemPrivate MethodPrivate
    GlyphGroupJSharpMethod GlyphItemShortcut MethodShortcut
    GlyphGroupJSharpField GlyphItemPublic FieldPublic
    GlyphGruppeJSharpFeld GlyphItemInternal FieldInternal
    GlyphGroupJSharpField GlyphItemFriend FieldInternal
    GlyphGroupJSharpField GlyphItemProtected FeldGeschützt
    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 Reference
    GlyphLibrary Bibliothek
    GlyphVBProject VBProjectNode
    GlyphCoolProject CSProjectNode
    GlyphCppProject CPPProjectNode
    GlyphDialogId Dialogfeld
    GlyphOpenFolder OrdnerGeöffnet
    GlyphClosedFolder OrdnerGeschlossen
    GlyphArrow GoToNext
    GlyphCSharpFile CSFileNode
    GlyphCSharpExpansion Schnipsel
    GlyphKeyword IntellisenseKeyword
    GlyphInformation Statusinformationen
    GlyphReference ClassMethodReference
    GlyphRecursion Rekursion
    GlyphXmlItem Tag
    GlyphJSharpProject DocumentCollection
    GlyphJSharpDocument Dokument
    GlyphForwardType GoToNext
    GlyphCallersGraph CallTo
    GlyphCallGraph AnrufVon
    GlyphWarning StatusWarning
    GlyphMaybeReference QuestionMark
    GlyphMaybeCaller CallTo
    GlyphMaybeCall CallFrom
    GlyphExtensionMethod ExtensionMethod
    GlyphExtensionMethodInternal Erweiterungsmethode
    GlyphExtensionMethodFriend ExtensionMethod
    GlyphExtensionMethodProtected ExtensionMethod
    GlyphExtensionMethodPrivate ExtensionMethod
    GlyphExtensionMethodShortcut ExtensionMethod
    GlyphXmlAttribute XmlAttribute
    GlyphXmlChild XmlElement
    GlyphXmlDescendant XmlDescendant
    GlyphXmlNamespace XmlNamespace
    GlyphXmlAttributeQuestion XmlAttributeLowConfidence
    GlyphXmlAttributeCheck XmlAttributeHighConfidence
    GlyphXmlKindFrage XmlElementLowConfidence
    GlyphXmlChildCheck XmlElementHighConfidence
    GlyphXmlDescendantQuestion XmlDescendantLowConfidence
    GlyphXmlDescendantCheck XmlDescendantHighConfidence
    GlyphCompletionWarning IntellisenseWarning