创建 VSIX 工具 window 时如何匹配 Visual Studio 的主题?
How can I match Visual Studio's theme when creating a VSIX tool window?
我正在为 Visual Studio (2012+) 创建一个涉及工具 window 的扩展。我希望 window 的样式与 Visual Studio 的当前主题相同。但是,我在弄清楚如何去做时遇到了很多麻烦。
This post 建议根本不需要应用任何样式,但这与我迄今为止的经验不符(甚至在 VS2017 中创建默认 VSIX 项目并添加工具 window显示一个按钮,我认为它是主题中的标准 WPF 而不是 VS 主题,至少在 VS2017 中使用深色 VS 主题时是这样。
This post问了类似的问题,当时的解决办法好像是用免费的工具包制作类似的控件。然而,那是针对 VS2012 和 6 年前的,我希望现在有更多可用的解决方案。走这条路似乎不太适合未来。
另一个解决方案是将 Visual Studio 的 VsBrushes 和 VsColors 应用于 WPF 控件。这可能让我找到了一些解决方案 - 但样式不仅仅是颜色,所以它似乎不是很令人满意。
有没有办法将 Visual Studio 的基本控件样式(按钮、文本框、列表视图、树视图等)应用到我的 VSIX 工具 window 中,使其看起来和感觉起来家在 Visual Studio?
感谢任何建议!
How can I match Visual Studio's theme when creating a VSIX tool window?
您可以尝试绑定到静态VS资源:
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:vs_shell="clr-namespace:Microsoft.VisualStudio.PlatformUI;assembly=Microsoft.VisualStudio.Shell.11.0">
<Style TargetType="Label">
<Setter Property="Foreground" Value="{DynamicResource {x:Static vs_shell:EnvironmentColors.ToolWindowTextBrushKey}}"/>
</Style>
<Style TargetType="TextBox">
<Setter Property="Foreground" Value="{DynamicResource {x:Static vs_shell:EnvironmentColors.ToolWindowTextBrushKey}}"/>
<Setter Property="Background" Value="{DynamicResource {x:Static vs_shell:EnvironmentColors.ToolWindowBackgroundBrushKey}}"/>
</Style>
</ResourceDictionary>
有关详细信息,请参阅 EnvironmentColors Class。
注意:要获得完全相同的主题,您需要使用 VS 使用的完全相同的 XAML。谢谢@GrantTheAnt。
我觉得好像这个问题的正确答案是:你不应该/Microsoft 不希望你这样做。 This post 概述了这背后的基本原理。 post 的 TLDR 似乎是 MS 不希望第三方 windows 看起来像官方 VS windows,因为这可能会给用户带来混淆。我想这很公平,但另一方面是 VS 最终看起来非常丑陋 themed/styled windows.
如果 - 像我一样 - 你仍然想像 VS 一样推进和设计你的 windows ,最好的选择似乎是与上面的@Leo 的 post 一起使用并使用 EnvironmentColors。您不会获得样式,但至少可以非常接近颜色。 This is a good blog 其中概述了更深入的内容。
我会接受 Leo 的回答,因为它是可用的最佳解决方案。
作为对此的另一个跟进,在编写我的 Visual Studio 扩展时,我真的想让我的工具 window 看起来像 Visual Studio window可能的。有时,我发现很难找到正确的 EnvironmentColors 值。至少,正确的颜色值应该适用于 default/provided Visual Studio 主题。所以,沮丧的是,我写了一个小应用程序来帮助我找出正确的值,我已经在 http://niahtextfilter.com/environmentcolorsfinder/ 上提供了它。要使用它,您需要指定所需的 RGB 颜色值,应用程序将显示最可能的 EnvironmentColors 候选项。为了获得最准确的候选者,您可以提供每个主题要显示的颜色(深色、常规、蓝色)——如果您截取示例 Visual Studio UI 元素的屏幕截图,这很容易实现在每个主题中,颜色下降你需要的像素。
它帮助我将我的工具 window 与 Visual Studio 相当好地匹配:
希望对其他人也有帮助!
我知道这是一个老问题,但我决定扩展答案。突然对某人有用。
除了颜色分配,您还可以为标准组件(Button、ComboBox 等)分配样式。所有款式都在VsResourceKeysclass.
例如:
<Button Style="{DynamicResource {x:Static vsshell:VsResourceKeys.ButtonStyleKey}}" />
另外 here 您可以在一张图片中看到不同配色方案(深色、浅色、蓝色)的所有颜色。
我正在为 Visual Studio (2012+) 创建一个涉及工具 window 的扩展。我希望 window 的样式与 Visual Studio 的当前主题相同。但是,我在弄清楚如何去做时遇到了很多麻烦。
This post 建议根本不需要应用任何样式,但这与我迄今为止的经验不符(甚至在 VS2017 中创建默认 VSIX 项目并添加工具 window显示一个按钮,我认为它是主题中的标准 WPF 而不是 VS 主题,至少在 VS2017 中使用深色 VS 主题时是这样。
This post问了类似的问题,当时的解决办法好像是用免费的工具包制作类似的控件。然而,那是针对 VS2012 和 6 年前的,我希望现在有更多可用的解决方案。走这条路似乎不太适合未来。
另一个解决方案是将 Visual Studio 的 VsBrushes 和 VsColors 应用于 WPF 控件。这可能让我找到了一些解决方案 - 但样式不仅仅是颜色,所以它似乎不是很令人满意。
有没有办法将 Visual Studio 的基本控件样式(按钮、文本框、列表视图、树视图等)应用到我的 VSIX 工具 window 中,使其看起来和感觉起来家在 Visual Studio?
感谢任何建议!
How can I match Visual Studio's theme when creating a VSIX tool window?
您可以尝试绑定到静态VS资源:
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:vs_shell="clr-namespace:Microsoft.VisualStudio.PlatformUI;assembly=Microsoft.VisualStudio.Shell.11.0">
<Style TargetType="Label">
<Setter Property="Foreground" Value="{DynamicResource {x:Static vs_shell:EnvironmentColors.ToolWindowTextBrushKey}}"/>
</Style>
<Style TargetType="TextBox">
<Setter Property="Foreground" Value="{DynamicResource {x:Static vs_shell:EnvironmentColors.ToolWindowTextBrushKey}}"/>
<Setter Property="Background" Value="{DynamicResource {x:Static vs_shell:EnvironmentColors.ToolWindowBackgroundBrushKey}}"/>
</Style>
</ResourceDictionary>
有关详细信息,请参阅 EnvironmentColors Class。
注意:要获得完全相同的主题,您需要使用 VS 使用的完全相同的 XAML。谢谢@GrantTheAnt。
我觉得好像这个问题的正确答案是:你不应该/Microsoft 不希望你这样做。 This post 概述了这背后的基本原理。 post 的 TLDR 似乎是 MS 不希望第三方 windows 看起来像官方 VS windows,因为这可能会给用户带来混淆。我想这很公平,但另一方面是 VS 最终看起来非常丑陋 themed/styled windows.
如果 - 像我一样 - 你仍然想像 VS 一样推进和设计你的 windows ,最好的选择似乎是与上面的@Leo 的 post 一起使用并使用 EnvironmentColors。您不会获得样式,但至少可以非常接近颜色。 This is a good blog 其中概述了更深入的内容。
我会接受 Leo 的回答,因为它是可用的最佳解决方案。
作为对此的另一个跟进,在编写我的 Visual Studio 扩展时,我真的想让我的工具 window 看起来像 Visual Studio window可能的。有时,我发现很难找到正确的 EnvironmentColors 值。至少,正确的颜色值应该适用于 default/provided Visual Studio 主题。所以,沮丧的是,我写了一个小应用程序来帮助我找出正确的值,我已经在 http://niahtextfilter.com/environmentcolorsfinder/ 上提供了它。要使用它,您需要指定所需的 RGB 颜色值,应用程序将显示最可能的 EnvironmentColors 候选项。为了获得最准确的候选者,您可以提供每个主题要显示的颜色(深色、常规、蓝色)——如果您截取示例 Visual Studio UI 元素的屏幕截图,这很容易实现在每个主题中,颜色下降你需要的像素。
它帮助我将我的工具 window 与 Visual Studio 相当好地匹配:
希望对其他人也有帮助!
我知道这是一个老问题,但我决定扩展答案。突然对某人有用。
除了颜色分配,您还可以为标准组件(Button、ComboBox 等)分配样式。所有款式都在VsResourceKeysclass.
例如:
<Button Style="{DynamicResource {x:Static vsshell:VsResourceKeys.ButtonStyleKey}}" />
另外 here 您可以在一张图片中看到不同配色方案(深色、浅色、蓝色)的所有颜色。