我正在开发一个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>
答案 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”