2017-12-01 3 views
0

Ich arbeite an einem VSIX-Projekt, bei dem ich versuche, die Erweiterung für alle Arten von Designs (Light, Dark und Blue) reagieren, je nachdem, was der Benutzer wählt. Die Steuerelemente und der Text werden bei bestimmten Themen unlesbar. Ich habe versucht, die Theme Dictionaries im Resource Dictionary in den UserControl.Resources zu verwenden, aber meine Steuerelemente passen sich nicht an das ausgewählte Thema an. Kann mir jemand sagen, was ist der richtige Weg ist, um die ThemeDictionaries in einem VSIX Projekt verwenden Sie den Code unten Ich habe versucht:Vsix Anpassungsfähigkeit an Theme-Änderung

<UserControl.Resources> 
<ResourceDictionary> 
    <ResourceDictionary.ThemeDictionaries> 
       <ResourceDictionary x:Key="Light"> 
        <SolidColorBrush x:Key="myBrush" Color="{StaticResource SystemBaseHighColor}"/> 
       </ResourceDictionary> 
       <ResourceDictionary x:Key="Dark"> 
        <SolidColorBrush x:Key="myBrush" Color="{StaticResource SystemBaseHighColor}"/> 
       </ResourceDictionary> 
       <ResourceDictionary x:Key="HighContrast"> 
        <SolidColorBrush x:Key="myBrush" Color="{ThemeResource SystemColorButtonFaceColor}"/> 
       </ResourceDictionary> 
      </ResourceDictionary.ThemeDictionaries> 
     </ResourceDictionary> 
</UserControl.Resources> 
+0

Siehe https://StackOverflow.com/questions/18913208/Farben-in-Visual-Studio-Erweiterung / –

Antwort

0

Der beste Weg, Visual Studio-Erweiterungen Thema ist die VSIX Color Editor zu verwenden, um entweder Ihre eigenen zu erstellen Verwenden Sie Farbschlüssel für jedes VS-Theme in der Box oder wählen Sie bereits vorhandene VS-Farbschlüssel aus, die Sie für die Verwendung in Ihrer Erweiterung exportieren möchten.

Sobald Sie Ihre Themen gestaltet, können Sie Datei> Speichern unter eine PKGDEF Datei und Generate Code for Accessing the Colors, eine PKGDEF Datei mit dem Thema Findmittel zu erstellen, und eine Code-Datei, diese Ressourcen für den Zugriff auf jeweils.

Fügen Sie dann beide Dateien zu Ihrem Visual Studio VSIX Project hinzu. Fügen Sie die Codedatei als C# -Quellen hinzu und legen Sie die PKGDEF-Datei für die Installation mit VSIX fest, indem Sie die PKGDEF-Datei Build Action Property to 'Content' ändern.

Dann in XAML, können Sie diese Farbtasten durch die Bindung an sich mit XAML ähnlich konsumieren:

<Setter Property="Background" Value="{DynamicResource {x:Static uicolors:VSColors.PopupBackgroundTextBrushKey}}" /> 

Wo uicolors ist der C# Namensraum die erzeugten C# Klasse enthält, in dem Stamm XAML Elemente deklarierte :

xmlns:uicolors="clr-namespace:VSOmniBox.UI.Colors" 

Und PopupBackgroundTextBrushKey eine C# Eigenschaft ist von der VSIX Color Editor generiert:

public static ThemeResourceKey PopupBackgroundTextColorKey { get { return _PopupBackgroundTextColorKey ?? (_PopupBackgroundTextColorKey = new ThemeResourceKey(Category, "PopupBackground", ThemeResourceKeyType.ForegroundColor)); } } 

Das Theming-System von Visual Studio ist intelligent genug, um die richtige Farbressource aus dem PKGDEF basierend auf dem aktuellen Thema zurückzugeben und aktualisiert jede sichtbare Benutzeroberfläche.

Eine vollständige Probe des Themas kann in meinem hacky, noch nicht vollständigen VSOmniBox project gefunden werden. Beurteilen Sie nicht die Codequalität, es ist ziemlich schlecht :)

Wenn Sie aus irgendeinem Grund feststellen, dass Farben nicht geladen werden können, überprüfen Sie das Installationsverzeichnis des Pakets (normalerweise in% localappdata% \ Microsoft \ VisualStudio \ 15. * \ Erweiterungen ..) für die PKGDEF, dann die folgenden von einem Entwickler-Eingabeaufforderung:

devenv.exe /updateconfiguration 

VSIX Color Editor mit dem VS Extensibility Workload installiert ist, und sie lebt in: „C: \ Program Files (x86) \ Microsoft Visual Studio \ 2017 \ Community \ VSSDK \ VisualStudioIntegration \ Tools \ Bin \ VsixColorEditor.exe "

Verwandte Themen