在我的WPF用户控件中,如果用户有一个黑暗的主题,我的所有文本默认为黑色将难以阅读。使用 VS 当前颜色的正确方法是什么。
答案 0 :(得分:0)
您可以通过两种方式编写自己的Visual Studio样式画笔并与控件合并。
另一方面,您可以从Windows注册表中选择VS主题的资源。很久以前我使用Utility类从windows Registry中选择当前主题。
public enum VsTheme
{
Unknown = 0,
Light,
Dark,
Blue
}
public class ThemeUtil
{
private static readonly IDictionary<string, VsTheme> Themes = new Dictionary<string, VsTheme>()
{
{ "de3dbbcd-f642-433c-8353-8f1df4370aba", VsTheme.Light },
{ "1ded0138-47ce-435e-84ef-9ec1f439b749", VsTheme.Dark },
{ "a4d6a176-b948-4b29-8c66-53c97a1ed7d0", VsTheme.Blue }
};
public static VsTheme GetCurrentTheme()
{
string themeId = GetThemeId();
if (string.IsNullOrWhiteSpace(themeId) == false)
{
VsTheme theme;
if (Themes.TryGetValue(themeId, out theme))
{
return theme;
}
}
return VsTheme.Unknown;
}
public static string GetThemeId()
{
const string CategoryName = "General";
const string ThemePropertyName = "CurrentTheme";
string keyName = string.Format(@"Software\Microsoft\VisualStudio\11.0\{0}", CategoryName);
using (RegistryKey key = Registry.CurrentUser.OpenSubKey(keyName))
{
if (key != null)
{
return (string)key.GetValue(ThemePropertyName, string.Empty);
}
}
return null;
}
}
我找到了另一种方法。我可以直接使用xaml中的visual studio主题颜色资源。对于这些,您需要 Microsoft.VisualStudio.Shell.12.0。(对于VS2013)它是VisualStudio版本的可分发组件。一旦您通过项目添加,您可以直接访问所有画笔作为XAML本身的关键。例如
Background="{DynamicResource {x:Static vsfx:VsBrushes.EnvironmentBackgroundGradientKey}}"
NameSpace必须添加为
xmlns:vsfx="clr-namespace:Microsoft.VisualStudio.Shell;assembly=Microsoft.VisualStudio.Shell.12.0"
您可以从以下MSDN链接中引用所有画笔
https://msdn.microsoft.com/en-us/library/microsoft.visualstudio.shell.vsbrushes(v=vs.120).aspx
如果您想要检测主题更改事件本身,可以使用 VSColorTheme.ThemeChanged 事件