Vsix对主题变化的适应性

时间:2017-12-01 12:43:30

标签: visual-studio-2015 themes vsix

我正在开发一个VSIX项目,其中我试图使扩展响应各种主题(光,暗和蓝),无论用户选择哪个。控件和文本在某些主题上变得不可读。我尝试在UserControl.Resources的资源字典中使用ThemeDictionaries,但我的控件不适应所选主题。有人能告诉我在VSIX项目中使用ThemeDictionaries的正确方法以下是我试过的代码:

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

1 个答案:

答案 0 :(得分:2)

主题Visual Studio扩展的最佳方法是使用VSIX Color Editor为每个内置VS主题创建自己的一组颜色键,或选择要导出的预先存在的VS颜色键以供在你的扩展名。

设计主题后,您可以文件&gt;另存为 PKGDEF文件和Generate Code for Accessing the Colors,分别创建包含主题资源的PKGDEF文件和用于访问这些资源的代码文件。

然后,将这两个文件添加到Visual Studio VSIX Project。将代码文件添加为C#源代码,并通过更改PKGDEF的Build Action Property to 'Content'将PKGDEF文件设置为与VSIX一起安装。

然后,在您的XAML中,您可以通过使用XAML绑定它们来使用这些颜色键,类似于:

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

uicolors是包含生成的C#类的C#名称空间,在根XAML元素中声明:

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

PopupBackgroundTextBrushKey是VSIX Color Editor生成的C#属性:

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

Visual Studio的主题系统非常智能,可以根据当前主题从PKGDEF返回正确的颜色资源,并可以实时更新任何可见的UI。

完整的主题样本可以在我的hacky,not-yet-complete VSOmniBox project中找到。不要判断代码质量,这是非常糟糕的:)

如果由于任何原因您发现颜色无法加载,请检查您的软件包的安装目录(通常在%localappdata%\ Microsoft \ VisualStudio \ 15。* \ Extensions ..中),然后运行以下命令:开发人员命令提示符:

devenv.exe /updateconfiguration

VSIX Color Editor随VS Extensibility工作负载一起安装,它位于: “C:\ Program Files(x86)\ Microsoft Visual Studio \ 2017 \ Community \ VSSDK \ VisualStudioIntegration \ Tools \ Bin \ VsixColorEditor.exe”