Udostępnij za pośrednictwem


Usługa i katalog obrazów

Ta książka kucharka zawiera wskazówki i najlepsze rozwiązania dotyczące wdrażania usługi obrazów programu Visual Studio i wykazu obrazów wprowadzonego w programie Visual Studio 2015.

Usługa obrazów wprowadzona w programie Visual Studio 2015 umożliwia deweloperom uzyskanie najlepszych obrazów dla urządzenia i wybranego motywu użytkownika w celu wyświetlenia obrazu, w tym poprawianie motywów dla kontekstu, w którym są wyświetlane. Wdrożenie usługi obrazów pomoże wyeliminować poważne problemy związane z konserwacją zasobów, skalowaniem hdPI i motywami.

Problemy dzisiaj Rozwiązania
Łączenie kolorów tła Wbudowane mieszanie alfa
Motywy (niektóre) obrazy Metadane motywu
Tryb dużego kontrastu Alternatywne zasoby o dużym kontraście
Potrzeba wielu zasobów dla różnych trybów DPI Wybieralne zasoby z rezerwowym opartym na wektorach
Zduplikowane obrazy Jeden identyfikator na koncepcję obrazu

Dlaczego warto wdrożyć usługę obrazów?

  • Zawsze pobieraj najnowszy obraz "pixel-perfect" z programu Visual Studio

  • Możesz przesyłać własne obrazy i korzystać z nich

  • Nie trzeba testować obrazów, gdy system Windows dodaje nowe skalowanie DPI

  • Rozwiązywanie problemów ze starą architekturą w implementacjach

    Pasek narzędzi powłoki programu Visual Studio przed i po użyciu usługi obrazów:

    Usługa obrazów przed i po

Jak to działa

Usługa obrazów może dostarczyć obraz map bitowy odpowiedni dla dowolnej obsługiwanej platformy interfejsu użytkownika:

  • WPF: BitmapSource

  • WinForms: System.Drawing.Bitmap

  • Win32: HBITMAP

    Diagram przepływu usługi obrazowej

    Diagram przepływu usługi obrazów

    Obrazy monikers

    Moniker obrazu (lub moniker for short) to para identyfikatorów GUID/ID, która jednoznacznie identyfikuje zasób obrazu lub zasób listy obrazów w bibliotece obrazów.

    Znane jęki

    Zestaw elementów monikerów obrazów zawartych w wykazie obrazów programu Visual Studio i publicznie używanych przez dowolny składnik lub rozszerzenie programu Visual Studio.

    Pliki manifestu obrazu

    Pliki manifestu obrazu (imagemanifest) to pliki XML, które definiują zestaw zasobów obrazów, elementy monikers reprezentujące te zasoby oraz rzeczywisty obraz lub obrazy reprezentujące każdy zasób. Manifesty obrazów mogą definiować autonomiczne obrazy lub listy obrazów dla starszej obsługi interfejsu użytkownika. Ponadto istnieją atrybuty, które można ustawić na zasobie lub na poszczególnych obrazach za każdym zasobem, aby zmienić czas i sposób wyświetlania tych zasobów.

    Schemat manifestu obrazu

    Pełny manifest obrazu wygląda następująco:

<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

Jako pomoc w czytelności i konserwacji manifest obrazu może używać symboli dla wartości atrybutów. Symbole są zdefiniowane w następujący sposób:

<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>
Podelement Definicja
Importuj Importuje symbole danego pliku manifestu do użycia w bieżącym manifeście
Identyfikator GUID Symbol reprezentuje identyfikator GUID i musi być zgodny z formatowaniem identyfikatora GUID
ID Symbol reprezentuje identyfikator i musi być nienegacyjną liczbą całkowitą
String Symbol reprezentuje dowolną wartość ciągu

Symbole są uwzględniane w wielkości liter i odwołują się do składni $(nazwa-symbolu):

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

Niektóre symbole są wstępnie zdefiniowane dla wszystkich manifestów. Można ich użyć w atrybucie <Uri elementu Source> lub <Import> do ścieżek odwołań na komputerze lokalnym.

Symbol Opis
CommonProgramFiles Wartość zmiennej środowiskowej %CommonProgramFiles%
Localappdata Wartość zmiennej środowiskowej %LocalAppData%
ManifestFolder Folder zawierający plik manifestu
Mydocuments Pełna ścieżka folderu Moje dokumenty bieżącego użytkownika
Programfiles Wartość zmiennej środowiskowej %ProgramFiles%
System Folder Windows\System32
Windir Wartość zmiennej środowiskowej %WinDir%

Obraz

Element <Image> definiuje obraz, do którego można odwoływać się pod pseudonimem. Identyfikator GUID i identyfikator wzięty razem tworzą pseudonim obrazu. Pseudonim obrazu musi być unikatowy w całej bibliotece obrazów. Jeśli dany pseudonim zawiera więcej niż jeden obraz, pierwszy napotkany podczas kompilowania biblioteki jest tym, który jest zachowywany.

Musi zawierać co najmniej jedno źródło. Źródła neutralne pod względem rozmiaru dają najlepsze wyniki w szerokim zakresie rozmiarów, ale nie są wymagane. Jeśli usługa zostanie poproszona o obraz o rozmiar niezdefiniowany w <elemecie Obraz> i nie ma źródła neutralnego rozmiaru, usługa wybierze najlepsze źródło specyficzne dla rozmiaru i przeskaluje je do żądanego rozmiaru.

<Image Guid="guid" ID="int" AllowColorInversion="true/false">
      <Source ... />
      <!-- optional additional Source elements -->
</Image>
Atrybut Definicja
Identyfikator GUID [Wymagane] Część identyfikatora GUID moniker obrazu
ID [Wymagane] Część identyfikatora moniker obrazu
AllowColorInversion [Opcjonalnie, wartość domyślna true] Wskazuje, czy obraz może mieć swoje kolory programowo odwrócone w przypadku użycia na ciemnym tle.

Source

Element <Źródłowy> definiuje pojedynczy zasób źródłowy obrazu (XAML i PNG).

<Source Uri="uri" Background="background">
      <!-- optional NativeResource element -->
 </Source>
Atrybut Definicja
Identyfikator URI [Wymagane] Identyfikator URI definiujący, skąd można załadować obraz. Może to być jedna z następujących opcji:

— Identyfikator URI pakietu przy użyciu urzędu application:///
— Odwołanie do zasobów składnika bezwzględnego
- Ścieżka do pliku zawierającego zasób natywny
Tło [Opcjonalnie] Wskazuje, jakiego rodzaju tło ma być używane źródło.

Może to być jedna z następujących opcji:

Światło: Źródło może być używane na jasnym tle.

Ciemny: źródło może być używane na ciemnym tle.

HighContrast: źródło może być używane w dowolnym tle w trybie dużego kontrastu.

HighContrastLight: źródło może być używane na jasnym tle w trybie dużego kontrastu.

HighContrastDark: źródło może być używane na ciemnym tle w trybie dużego kontrastu.

Jeśli atrybut Background zostanie pominięty, źródło może być używane w dowolnym tle.

Jeśli tło jest jasne, ciemne, HighContrastLight lub HighContrastDark, kolory źródła nigdy nie są odwrócone. Jeśli w tle pominięto lub ustawiono wartość HighContrast, inwersja kolorów źródła jest kontrolowana przez atrybut AllowColorInversion obrazu.

Element <źródłowy> może mieć dokładnie jeden z następujących opcjonalnych elementów podrzędnych:

Element Atrybuty (wszystkie wymagane) Definicja
<Rozmiar> Wartość Źródło będzie używane do obrazów danego rozmiaru (w jednostkach urządzeń). Obraz będzie kwadratowy.
<SizeRange> MinSize, MaxSize Źródło będzie używane dla obrazów z minsize do MaxSize (w jednostkach urządzeń) włącznie. Obraz będzie kwadratowy.
<Wymiary> Szerokość, wysokość Źródło będzie używane do obrazów danej szerokości i wysokości (w jednostkach urządzeń).
<WymiarRange> MinWidth, MinHeight,

MaxWidth, MaxHeight
Źródło będzie używane dla obrazów z minimalnej szerokości/wysokości do maksymalnej szerokości/wysokości (w jednostkach urządzeń) włącznie.

Element <źródłowy> może również mieć opcjonalny <podelement NativeResource> , który definiuje <źródło> ładowane z zestawu natywnego, a nie z zarządzanego zestawu.

<NativeResource Type="type" ID="int" />
Atrybut Definicja
Typ [Wymagane] Typ zasobu natywnego, XAML lub PNG
ID [Wymagane] Część identyfikatora całkowitego zasobu natywnego

Imagelist

Element <ImageList> definiuje kolekcję obrazów, które można zwrócić w jednym pasku. Pasek jest zbudowany na żądanie zgodnie z potrzebami.

<ImageList>
      <ContainedImage Guid="guid" ID="int" External="true/false" />
      <!-- optional additional ContainedImage elements -->
 </ImageList>
Atrybut Definicja
Identyfikator GUID [Wymagane] Część identyfikatora GUID moniker obrazu
ID [Wymagane] Część identyfikatora moniker obrazu
Zewnętrzne [Opcjonalne, domyślne fałsz] Wskazuje, czy moniker obrazu odwołuje się do obrazu w bieżącym manifeście.

Pseudonim zawartego obrazu nie musi odwoływać się do obrazu zdefiniowanego w bieżącym manifeście. Jeśli nie można odnaleźć zawartego obrazu w bibliotece obrazów, w jego miejscu zostanie użyty pusty obraz zastępczy.

Korzystanie z usługi obrazów

Pierwsze kroki (zarządzane)

Aby użyć usługi obrazów, należy dodać odwołania do niektórych lub wszystkich następujących zestawów do projektu:

  • Microsoft.VisualStudio.ImageCatalog.dll

    • Wymagane, jeśli używasz wbudowanego wykazu obrazów KnownMonikers.
  • Microsoft.VisualStudio.Imaging.dll

    • Wymagane w przypadku używania funkcji CrispImage i ImageThemingUtilities w interfejsie użytkownika WPF.
  • Microsoft.VisualStudio.Imaging.Interop.14.0.DesignTime.dll

    • Wymagane w przypadku używania typów ImageMoniker i ImageAttributes .

    • Parametr EmbedInteropTypes powinien mieć wartość true.

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

    • Wymagane, jeśli używasz typu IVsImageService2 .

    • Parametr EmbedInteropTypes powinien mieć wartość true.

  • Microsoft.VisualStudio.Utilities.dll

    • Wymagane, jeśli używasz elementu BrushToColorConverter dla elementu ImageThemingUtilities.ImageBackgroundColor w interfejsie użytkownika WPF.
  • Microsoft.VisualStudio.Shell.<VSVersion.0>

    • Wymagane, jeśli używasz typu IVsUIObject .
  • Microsoft.VisualStudio.Shell.Interop.10.0.dll

    • Wymagane w przypadku korzystania z pomocników interfejsu użytkownika związanych z formularzami WinForms.

    • Parametr EmbedInteropTypes powinien mieć wartość true

Pierwsze kroki (natywne)

Aby użyć usługi obrazów, musisz uwzględnić niektóre lub wszystkie następujące nagłówki w projekcie:

  • KnownImageIds.h

    • Wymagane, jeśli używasz wbudowanego wykazu obrazów KnownMonikers, ale nie można użyć typu ImageMoniker , takiego jak podczas zwracania wartości z IVsHierarchy GetGuidProperty lub GetProperty wywołań.
  • KnownMonikers.h

    • Wymagane, jeśli używasz wbudowanego wykazu obrazów KnownMonikers.
  • ImageParameters140.h

    • Wymagane w przypadku używania typów ImageMoniker i ImageAttributes .
  • VSShell140.h

    • Wymagane, jeśli używasz typu IVsImageService2 .
  • ImageThemingUtilities.h

    • Wymagane, jeśli nie możesz zezwolić usłudze obrazów na obsługę ich za Ciebie.

    • Nie używaj tego nagłówka, jeśli usługa obrazu może obsługiwać motywy obrazu.

  • VsDpiAwareness.h

    • Wymagane w przypadku używania pomocników rozpoznawania dpi w celu uzyskania bieżącego dpi.

Jak mogę napisać nowy interfejs użytkownika WPF?

  1. Zacznij od dodania odwołań do zestawu wymaganych w powyższej sekcji pierwszych kroków do projektu. Nie musisz dodawać wszystkich z nich, więc dodaj tylko potrzebne odwołania. (Uwaga: jeśli używasz lub masz dostęp do Kolory zamiast pędzli, a następnie można pominąć odwołanie do narzędzi, ponieważ nie będzie potrzebny konwerter.

  2. Wybierz żądany obraz i pobierz jego pseudonim. Użyj obiektu KnownMoniker lub użyj własnego, jeśli masz własne niestandardowe obrazy i elementy monikers.

  3. Dodaj crispImages do kodu XAML. (Zobacz poniższy przykład).

  4. Ustaw właściwość ImageThemingUtilities.ImageBackgroundColor w hierarchii interfejsu użytkownika. (Należy to ustawić w lokalizacji, w której jest znany kolor tła, niekoniecznie na CrispImage.) (zobacz poniższy przykład).

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

Jak mogę zaktualizować istniejący interfejs użytkownika WPF?

Aktualizowanie istniejącego interfejsu użytkownika WPF jest stosunkowo prostym procesem składającym się z trzech podstawowych kroków:

  1. Zastąp wszystkie <elementy obrazu> w interfejsie użytkownika elementami <CrispImage> .

  2. Zmień wszystkie atrybuty źródłowe na Atrybuty Moniker.

    • Jeśli obraz nigdy się nie zmienia i używasz metody KnownMonikers, statycznie powiąż te właściwości z elementem KnownMoniker. (Zobacz powyższy przykład).

    • Jeśli obraz nigdy się nie zmienia i używasz własnego obrazu niestandardowego, statycznie powiązać z własnym monikerem.

    • Jeśli obraz może ulec zmianie, powiąż atrybut Moniker z właściwością kodu, która powiadamia o zmianach właściwości.

  3. Gdzieś w hierarchii interfejsu użytkownika ustaw wartość ImageThemingUtilities.ImageBackgroundColor , aby upewnić się, że inwersja kolorów działa poprawnie.

    • Może to wymagać użycia klasy BrushToColorConverter . (Zobacz powyższy przykład).

Jak mogę zaktualizować interfejs użytkownika win32?

Dodaj następujący kod wszędzie tam, gdzie jest to właściwe, aby zastąpić nieprzetworzone ładowanie obrazów. Przełącz wartości dla zwracania HBITMAPs a HICON i HIMAGELIST zgodnie z potrzebami.

Pobieranie usługi obrazów

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

Żądanie obrazu

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

Jak mogę zaktualizować interfejs użytkownika winforms?

Dodaj następujący kod wszędzie tam, gdzie jest to właściwe, aby zastąpić nieprzetworzone ładowanie obrazów. Przełącz wartości dla zwracania map bitowych i ikon zgodnie z potrzebami.

Pomocna instrukcja using

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

Pobieranie usługi obrazów

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

Żądanie obrazu

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

Jak mogę używać monikers obrazów w nowym oknie narzędzi?

Szablon projektu pakietu VSIX został zaktualizowany dla programu Visual Studio 2015. Aby utworzyć nowe okno narzędzia, kliknij prawym przyciskiem myszy projekt VSIX i wybierz polecenie Dodaj>nowy element (Ctrl+Shift+A). W węźle Rozszerzalność języka projektu wybierz pozycję Okno narzędzi niestandardowych, nadaj okno narzędzia nazwę i naciśnij przycisk Dodaj .

Są to kluczowe miejsca do używania monikers w oknie narzędzi. Postępuj zgodnie z instrukcjami dla każdego z nich:

  1. Karta okna narzędzi, gdy karty są wystarczająco małe (używane również w przełączniku okna tabulacji Ctrl+).

    Dodaj ten wiersz do konstruktora klasy pochodzącej z typu ToolWindowPane :

    // Replace this KnownMoniker with your desired ImageMoniker
    this.BitmapImageMoniker = KnownMonikers.Blank;
    
  2. Polecenie, aby otworzyć okno narzędzia.

    .vsct W pliku pakietu edytuj przycisk polecenia okna narzędzi:

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

    Upewnij się, że w górnej części pliku <Extern> istnieją również następujące elementy:

    <Include href="KnownImageIds.vsct"/>
    

Jak mogę używać monikers obrazów w istniejącym oknie narzędzi?

Aktualizowanie istniejącego okna narzędzi w celu używania monikers obrazów jest podobne do kroków tworzenia nowego okna narzędzi.

Są to kluczowe miejsca do używania monikers w oknie narzędzi. Postępuj zgodnie z instrukcjami dla każdego z nich:

  1. Karta okna narzędzi, gdy karty są wystarczająco małe (używane również w przełączniku okna tabulacji Ctrl+).

    1. Usuń te wiersze (jeśli istnieją) w konstruktorze klasy pochodzącej z typu ToolWindowPane :

      this.BitmapResourceID = <Value>;
      this.BitmapIndex = <Value>;
      
    2. Zobacz krok 1 sekcji "Jak mogę use image monikers in a new tool window?" (Jak mogę użyj monikers obrazów w nowym oknie narzędzia?" powyżej.

  2. Polecenie, aby otworzyć okno narzędzia.

    • Zobacz krok 2 sekcji "Jak mogę use image monikers in a new tool window?" (Jak mogę używać monikers obrazów w nowym oknie narzędzi?" powyżej.

Jak mogę używać monikers obrazów w pliku vsct?

.vsct Zaktualizuj plik zgodnie z poniższymi komentarzami:

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

Co zrobić, jeśli mój plik vsct musi być również odczytany przez starsze wersje programu Visual Studio?

Starsze wersje programu Visual Studio nie rozpoznają flagi polecenia IconIsMoniker . Możesz używać obrazów z usługi obrazów w wersjach programu Visual Studio, które go obsługują, ale nadal używać obrazów starego stylu w starszych wersjach programu Visual Studio. W tym celu pozostawisz .vsct plik bez zmian (i dlatego jest zgodny ze starszymi wersjami programu Visual Studio) i utworzysz plik CSV (wartości rozdzielone przecinkami) mapowany z par identyfikatorów GUID/ID zdefiniowanych w .vsct elemencie Mapy bitowe> pliku <na pary identyfikatorów GUID/ID obrazu.

Format pliku CSV mapowania to:

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

Plik CSV jest wdrażany z pakietem, a jego lokalizacja jest określana przez właściwość IconMappingFilename atrybutu pakietu ProvideMenuResource:

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

IconMappingFilename to ścieżka względna niejawnie zakorzeniona w $PackageFolder$ (jak w powyższym przykładzie) lub ścieżka bezwzględna jawnie zakorzeniona w katalogu zdefiniowanym przez zmienną środowiskową, taką jak @"%UserProfile%\dir1\dir2\MyMappingFile.csv".

Jak mogę port systemu projektu?

Jak dostarczyć element ImageMonikers dla projektu

  1. Zaimplementuj VSHPROPID_SupportsIconMonikers w interfejsie IVsHierarchy projektu i zwróć wartość true.

  2. Zaimplementuj VSHPROPID_IconMonikerImageList (jeśli oryginalny projekt używał VSHPROPID_IconImgList) lub VSHPROPID_IconMonikerGuid, VSHPROPID_IconMonikerId, VSHPROPID_OpenFolderIconMonikerGuid, VSHPROPID_OpenFolderIconMonikerId (jeśli oryginalny projekt używał VSHPROPID_IconHandle i VSHPROPID_OpenFolderIconHandle).

  3. Zmień implementację oryginalnych identyfikatorów VSHPROPID dla ikon, aby utworzyć "starsze" wersje ikon, jeśli punkty rozszerzenia ich zażądają. Usługa IVsImageService2 udostępnia funkcje niezbędne do pobrania tych ikon

    Dodatkowe wymagania dotyczące odmian projektów VB/C#

    Zaimplementuj VSHPROPID_SupportsIconMonikers tylko wtedy, gdy wykryjesz, że projekt jest najbardziej zewnętrznym smakiem. W przeciwnym razie rzeczywisty najbardziej zewnętrzny smak może nie obsługiwać monikers obrazów w rzeczywistości, a twój podstawowy smak może skutecznie "ukryć" dostosowane obrazy.

    Jak mogę używać monikers obrazów w CPS?

    Ustawianie obrazów niestandardowych w programie CPS (common Project System) można wykonać ręcznie lub za pomocą szablonu elementu dostarczanego z zestawem SDK rozszerzalności systemu project.

    Korzystanie z zestawu PROJECT System Extensibility SDK

    Postępuj zgodnie z instrukcjami podanymi w temacie Udostępnianie ikon niestandardowych dla typu projektu/typu elementu, aby dostosować obrazy CPS. Więcej informacji na temat cpS można znaleźć w dokumentacji rozszerzalności programu Visual Studio Project System

    Ręczne używanie elementu ImageMonikers

  4. Zaimplementuj i wyeksportuj interfejs IProjectTreeModifier w systemie projektu.

  5. Ustal, którego nazwy znaneMoniker lub niestandardowego obrazu chcesz użyć.

  6. W metodzie ApplyModifications wykonaj następujące czynności w metodzie przed zwróceniem nowego drzewa, podobnie jak w poniższym przykładzie:

    // Replace this KnownMoniker with your desired ImageMoniker
    tree = tree.SetIcon(KnownMonikers.Blank.ToProjectSystemType());
    
  7. Jeśli tworzysz nowe drzewo, możesz ustawić obrazy niestandardowe, przekazując żądane elementy monikers do metody NewTree, podobnie jak w poniższym przykładzie:

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

Jak mogę przekonwertować z rzeczywistego paska obrazu na pasek obrazu oparty na moniker?

Muszę wspierać HIMAGELISTs

Jeśli istnieje już istniejący pasek obrazów dla kodu, który chcesz zaktualizować w celu korzystania z usługi obrazów, ale masz ograniczenie przez interfejsy API, które wymagają przekazywania list obrazów, nadal możesz uzyskać korzyści z usługi obrazów. Aby utworzyć pasek obrazów oparty na moniker, wykonaj poniższe kroki, aby utworzyć manifest na podstawie istniejących elementów monikers.

  1. Uruchom narzędzie ManifestFromResources, przekazując go do paska obrazu. Spowoduje to wygenerowanie manifestu dla paska.

    • Zalecane: podaj inną niż domyślną nazwę manifestu, aby odpowiadała jego użyciu.
  2. Jeśli używasz tylko znanychmonikers, wykonaj następujące czynności:

    • Zastąp sekcję <Obrazy> manifestu obrazami </>.

    • Usuń wszystkie identyfikatory podobrazów (wszystkie elementy z <nazwą>_##) elementu imagestrip.

    • Zalecane: zmień nazwę symbolu AssetsGuid i symbolu paska obrazu, aby dopasować go do jego użycia.

    • Zastąp identyfikator GUID każdego obiektu ContainedImage wartością $(ImageCatalogGuid), zastąp każdy identyfikator ZawarteImage wartością $(<moniker>) i dodaj atrybut External="true" do każdego atrybutu ContainedImage

      • <element moniker> powinien zostać zastąpiony ciągiem KnownMoniker zgodnym z obrazem, ale ciągiem "KnownMonikers".
    • Dodaj <ścieżkę dir import Manifest="$(ManifestFolder)\<Relative install dir path to *>\Microsoft.VisualStudio.ImageCatalog.imagemanifest" /*> w górnej <części sekcji Symbole> .

      • Ścieżka względna jest określana przez lokalizację wdrożenia zdefiniowaną w konfiguracji tworzenia manifestu.
  3. Uruchom narzędzie ManifestToCode, aby wygenerować otoki, aby istniejący kod miał pseudonim, którego może użyć do wykonywania zapytań dotyczących usługi obrazów dla paska obrazów.

    • Zalecane: podaj nazwy niezdefinicyjne dla otoek i przestrzeni nazw, aby odpowiadały ich użyciu.
  4. Wykonaj wszystkie czynności związane z dodawaniem, konfigurowaniem tworzenia/wdrażaniem i innymi zmianami kodu, aby pracować z usługą obrazów i nowymi plikami.

    Przykładowy manifest zawierający obrazy wewnętrzne i zewnętrzne, aby zobaczyć, jak powinien wyglądać:

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

Nie muszę wspierać HIMAGELISTs

  1. Określ zestaw znanychmonikerów, które pasują do obrazów w pasku obrazu, lub utwórz własne elementy monikers dla obrazów na pasku obrazów.

  2. Zaktualizuj dowolne mapowanie użyte do pobrania obrazu na wymaganym indeksie na pasku obrazów, aby zamiast tego użyć obiektów monikers.

  3. Zaktualizuj kod, aby używał usługi obrazów do żądania monikers za pośrednictwem zaktualizowanego mapowania. (Może to oznaczać aktualizację do CrispImages dla kodu zarządzanego lub żądania HBITMAPs lub HICON z usługi obrazów i przekazywanie ich do kodu natywnego.

Testowanie obrazów

Aby przetestować manifesty obrazów, możesz użyć narzędzia Przeglądarka biblioteki obrazów, aby upewnić się, że wszystko zostało poprawnie utworzone. Narzędzie można znaleźć w zestawie Visual Studio 2015 SDK. Dokumentację tego narzędzia i innych można znaleźć tutaj.

Dodatkowe zasoby

Przykłady

Zaktualizowano kilka przykładów programu Visual Studio w witrynie GitHub, aby pokazać, jak używać usługi obrazów w ramach różnych punktów rozszerzalności programu Visual Studio.

Sprawdź http://github.com/Microsoft/VSSDK-Extensibility-Samples najnowsze przykłady.

Narzędzia

Utworzono zestaw narzędzi pomocy technicznej dla usługi obrazów, który pomaga w tworzeniu/aktualizowaniu interfejsu użytkownika, który współpracuje z usługą obrazów. Aby uzyskać więcej informacji na temat każdego narzędzia, zapoznaj się z dokumentacją dostarczaną z narzędziami. Narzędzia są dołączone do zestawu Visual Studio 2015 SDK.

ManifestFromResources

Narzędzie Manifest z zasobów pobiera listę zasobów obrazu (PNG lub XAML) i generuje plik manifestu obrazu do używania tych obrazów z usługą obrazów.

ManifestToCode

Narzędzie Manifest to Code pobiera plik manifestu obrazu i generuje plik otoki do odwoływania się do wartości manifestu w kodzie (C++, C#lub VB) lub .vsct plikach.

ImageLibraryViewer

Narzędzie Przeglądarka bibliotek obrazów może ładować manifesty obrazów i umożliwia użytkownikowi manipulowanie nimi w taki sam sposób, jak program Visual Studio, aby upewnić się, że manifest jest poprawnie utworzony. Użytkownik może zmienić tło, rozmiary, ustawienie DPI, duży kontrast i inne ustawienia. Wyświetla również informacje o ładowaniu w celu znalezienia błędów w manifestach i wyświetla informacje o źródle dla każdego obrazu w manifeście.

Często zadawane pytania

  • Czy istnieją zależności, które należy uwzględnić podczas ładowania <odwołania Include="Microsoft.VisualStudio.*. Interop.14.0.DesignTime" />?

    • Ustaw wartość EmbedInteropTypes="true" we wszystkich bibliotekach DLL międzyoperacyjności.
  • Jak mogę wdrożyć manifest obrazu z moim rozszerzeniem?

    • .imagemanifest Dodaj plik do projektu.

    • Ustaw wartość "Include in VSIX" (Uwzględnij w VSIX) na true.

  • Aktualizuję system projektu CPS. Co się stało z elementami ImageName i StockIconService?

    • Zostały one usunięte, gdy cpS został zaktualizowany do korzystania z monikers. Nie musisz już wywoływać metody StockIconService. Wystarczy przekazać żądany element KnownMoniker do metody lub właściwości przy użyciu metody rozszerzenia ToProjectSystemType() w narzędziach CPS. Mapowanie z ImageName na ZnaneMonikers można znaleźć poniżej:

      Imagename ZnanyMoniker
      ImageName.OfflineWebApp KnownImageIds.Web
      ImageName.WebReferencesFolder KnownImageIds.Web
      ImageName.OpenReferenceFolder ZnaneImageIds.FolderOtwórz
      ImageName.ReferenceFolder KnownImageIds.Reference
      ImageName.Reference KnownImageIds.Reference
      ImageName.SdlWebReference KnownImageIds.WebReferenceFolder
      ImageName.DiscoWebReference KnownImageIds.DynamicDiscoveryDocument
      ImageName.Folder ZnaneImageIds.FolderClosed
      ImageName.OpenFolder ZnaneImageIds.FolderOtwórz
      ImageName.ExcludedFolder KnownImageIds.HiddenFolderClosed
      ImageName.OpenExcludedFolder KnownImageIds.HiddenFolderOtwórz
      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. Ustawienia File
      ImageName.WebConfig KnownImageIds.ConfigurationFile
      ImageName.HtmlPage KnownImageIds.HTMLFile
      ImageName.StyleSheet KnownImageIds.StyleSheet
      ImageName.ScriptFile KnownImageIds.JSScript
      ImageName.TextFile KnownImageIds.Document
      Imagename. Ustawienia File KnownImageIds. Ustawienia
      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.App Projektant Folder 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 ZnaneImageIds.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
    • Aktualizuję mojego dostawcę listy uzupełniania. Jakie wartości KnownMonikers są zgodne ze starymi wartościami StandardGlyphGroup i StandardGlyph ?

      Nazwisko Nazwisko Nazwisko
      GlyphGroupClass GlyphItemPublic ClassPublic
      GlyphGroupClass GlyphItemInternal KlasaInternal
      GlyphGroupClass GlyphItemFriend KlasaInternal
      GlyphGroupClass GlyphItemProtected KlasaProtected
      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 WyliczenieInternal
      GlyphGroupEnum GlyphItemFriend WyliczenieInternal
      GlyphGroupEnum GlyphItemProtected WyliczenieProtected
      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 Zdarzenie chronione
      GlyphGroupEvent GlyphItemPrivate EventPrivate
      GlyphGroupEvent GlyphItemShortcut EventShortcut
      GlyphGroupException GlyphItemPublic ExceptionPublic
      GlyphGroupException GlyphItemInternal WyjątekInternal
      GlyphGroupException GlyphItemFriend WyjątekInternal
      GlyphGroupException GlyphItemProtected WyjątekOchroniony
      GlyphGroupException GlyphItemPrivate ExceptionPrivate
      GlyphGroupException GlyphItemShortcut ExceptionShortcut
      Pole GlyphGroup GlyphItemPublic FieldPublic
      Pole GlyphGroup GlyphItemInternal PoleInternal
      Pole GlyphGroup GlyphItemFriend PoleInternal
      Pole GlyphGroup GlyphItemProtected FieldProtected
      Pole GlyphGroup GlyphItemPrivate FieldPrivate
      Pole GlyphGroup 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 MakroInternal
      GlyphGroupMacro GlyphItemFriend MakroInternal
      GlyphGroupMacro GlyphItemProtected MakroChronione
      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 ModułInternal
      GlyphGroupModule GlyphItemFriend ModułInternal
      GlyphGroupModule GlyphItemProtected ModuleProtected
      GlyphGroupModule GlyphItemPrivate ModulePrivate
      GlyphGroupModule GlyphItemShortcut ModuleShortcut
      GlyphGroupNamespace GlyphItemPublic Przestrzeń nazwPublic
      GlyphGroupNamespace GlyphItemInternal Przestrzeń nazwInternal
      GlyphGroupNamespace GlyphItemFriend Przestrzeń nazwInternal
      GlyphGroupNamespace GlyphItemProtected Przestrzeń nazwProtected
      GlyphGroupNamespace GlyphItemPrivate Przestrzeń nazwPrivate
      GlyphGroupNamespace GlyphItemShortcut Przestrzeń nazwSzortcut
      GlyphGroupOperator GlyphItemPublic OperatorPublic
      GlyphGroupOperator GlyphItemInternal OperatorInternal
      GlyphGroupOperator GlyphItemFriend OperatorInternal
      GlyphGroupOperator GlyphItemProtected OperatorProtected
      GlyphGroupOperator GlyphItemPrivate OperatorPrivate
      GlyphGroupOperator GlyphItemShortcut OperatorShortcut
      GlyphGroupProperty GlyphItemPublic PropertyPublic
      GlyphGroupProperty GlyphItemInternal WłaściwośćInternal
      GlyphGroupProperty GlyphItemFriend WłaściwośćInternal
      GlyphGroupProperty GlyphItemProtected WłaściwośćProtected
      GlyphGroupProperty GlyphItemPrivate PropertyPrivate
      GlyphGroupProperty GlyphItemShortcut WłaściwośćShortcut
      GlyphGroupStruct GlyphItemPublic StructurePublic
      GlyphGroupStruct GlyphItemInternal StrukturaInternal
      GlyphGroupStruct GlyphItemFriend StrukturaInternal
      GlyphGroupStruct GlyphItemProtected StrukturaChroniona
      GlyphGroupStruct GlyphItemPrivate StructurePrivate
      GlyphGroupStruct GlyphItemShortcut StrukturaSzortcut
      GlyphGroupTemplate GlyphItemPublic TemplatePublic
      GlyphGroupTemplate GlyphItemInternal SzablonInternal
      GlyphGroupTemplate GlyphItemFriend SzablonInternal
      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
      Typ GlyphGroupType GlyphItemPublic TypePublic
      Typ GlyphGroupType GlyphItemInternal TypInternal
      Typ GlyphGroupType GlyphItemFriend TypInternal
      Typ GlyphGroupType GlyphItemProtected TypeProtected
      Typ GlyphGroupType GlyphItemPrivate TypePrivate
      Typ 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 PoleInternal
      GlyphGroupVariable GlyphItemFriend PoleInternal
      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 PoleInternal
      GlyphGroupJSharpField GlyphItemFriend PoleInternal
      GlyphGroupJSharpField GlyphItemProtected FieldProtected
      GlyphGroupJSharpField GlyphItemPrivate FieldPrivate
      GlyphGroupJSharpField GlyphItemShortcut FieldShortcut
      GlyphGroupJSharpClass GlyphItemPublic ClassPublic
      GlyphGroupJSharpClass GlyphItemInternal KlasaInternal
      GlyphGroupJSharpClass GlyphItemFriend KlasaInternal
      GlyphGroupJSharpClass GlyphItemProtected KlasaProtected
      GlyphGroupJSharpClass GlyphItemPrivate ClassPrivate
      GlyphGroupJSharpClass GlyphItemShortcut ClassShortcut
      GlyphGroupJSharpNamespace GlyphItemPublic Przestrzeń nazwPublic
      GlyphGroupJSharpNamespace GlyphItemInternal Przestrzeń nazwInternal
      GlyphGroupJSharpNamespace GlyphItemFriend Przestrzeń nazwInternal
      GlyphGroupJSharpNamespace GlyphItemProtected Przestrzeń nazwProtected
      GlyphGroupJSharpNamespace GlyphItemPrivate Przestrzeń nazwPrivate
      GlyphGroupJSharpNamespace GlyphItemShortcut Przestrzeń nazwSzortcut
      GlyphGroupJSharpInterface GlyphItemPublic InterfacePublic
      GlyphGroupJSharpInterface GlyphItemInternal InterfaceInternal
      GlyphGroupJSharpInterface GlyphItemFriend InterfaceInternal
      GlyphGroupJSharpInterface GlyphItemProtected InterfaceProtected
      GlyphGroupJSharpInterface GlyphItemPrivate InterfacePrivate
      GlyphGroupJSharpInterface GlyphItemShortcut InterfaceShortcut
      GlyphGroupError StatusError
      GlyphBscFile ClassFile
      GlyphAssembly Odwołanie
      GlyphLibrary Biblioteka
      GlyphVBProject VBProjectNode
      GlyphCoolProject CSProjectNode
      GlyphCppProject CPPProjectNode
      GlyphDialogId Okno dialogowe
      GlyphOpenFolder FolderOtwórz
      GlyphClosedFolder FolderKlosed
      GlyphArrow GoToNext
      GlyphCSharpFile CSFileNode
      GlyphCSharpExpansion Fragment kodu
      GlyphKeyword IntellisenseKeyword
      GlyphInformation StatusInformation
      GlyphReference ClassMethodReference
      GlyphRecursion Rekursja
      GlyphXmlItem Tag
      GlyphJSharpProject DocumentCollection
      GlyphJSharpDocument Dokument
      GlyphForwardType GoToNext
      GlyphCallersGraph CallTo
      GlyphCallGraph WywołanieZ
      GlyphWarning StatusWarning
      GlyphMaybeReference Znak zapytania
      GlyphMaybeCaller CallTo
      GlyphMaybeCall WywołanieZ
      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