C# 改变;“色彩主题”;在VisualStudio扩展中
我正在用C#编写一个Visual Studio扩展,我希望它能根据一天中的时间改变颜色主题(日落后会应用深色主题-日出时会根据用户的喜好应用蓝色/浅色主题) 我可以使用C# 改变;“色彩主题”;在VisualStudio扩展中,c#,visual-studio,visual-studio-2012,C#,Visual Studio,Visual Studio 2012,我正在用C#编写一个Visual Studio扩展,我希望它能根据一天中的时间改变颜色主题(日落后会应用深色主题-日出时会根据用户的喜好应用蓝色/浅色主题) 我可以使用ShellSettingsManager对象公开的WriteableSettingsStore更改颜色主题。当我执行以下代码时,主题在重新启动VisualStudio后发生更改 var settingsManager = new ShellSettingsManager(this); var writeableUserStore
ShellSettingsManager
对象公开的WriteableSettingsStore
更改颜色主题。当我执行以下代码时,主题在重新启动VisualStudio后发生更改
var settingsManager = new ShellSettingsManager(this);
var writeableUserStore = settingsManager.GetWritableSettingsStore(SettingsScope.UserSettings);
writeableUserStore.SetString("General", "CurrentTheme", GuidList.guidDarkTheme);
我更喜欢的是自动更新主题-我已经尝试使用user32api的UpdateWindow
和RedrawWindow
函数,但是窗口不会重新加载
因此,问题是-在更改注册表中的CurrentTheme属性后,如何“重画”Visual Studio?
ShellSettingsManager
允许您访问和修改Visual Studio设置,但只能在Windows注册表中。Visual Studio在重新启动之前不会拾取您所做的任何更改,因为VS仅在启动时从注册表读取设置。所以这是错误的方法
要更改设置并应用它们而不需要重新启动,您必须使用中讨论的。以下代码段显示了可以从“环境/常规”页面以编程方式更改的所有设置(您可以在此处更改主题):
所有这些设置都可以更改,VS将立即应用更改。问题是没有任何属性允许您更改主题。这就是为什么我认为这是不可能做到的。以下是最简单的方法: 概述:
var dte = GetService(typeof(EnvDTE._DTE)) as EnvDTE.DTE;
dte.ExecuteCommand("Tools.ImportandExportSettings", @"/import:""C:\yourpath\LightTheme.vssettings""");
我希望这会有所帮助。已经很晚了,但感谢您的来信@HadiBrais。您是否完成了此扩展?如果完成了,您是否向扩展市场发布了对当前visual studio 2019版本的支持?
AnimationSpeed: 5
RichClientExperienceOptions: 65535
WindowMenuContainsNItems: 10
CloseButtonActiveTabOnly: True
UseTitleCaseOnMenu: False
AutoAdjustExperience: True
Animations: True
AutohidePinActiveTabOnly: False
ShowStatusBar: True
MRUListContainsNItems: 10
var dte = GetService(typeof(EnvDTE._DTE)) as EnvDTE.DTE;
dte.ExecuteCommand("Tools.ImportandExportSettings", @"/import:""C:\yourpath\LightTheme.vssettings""");