我正在用 C# 编写一个 Visual Studio 扩展,我希望它能根据一天中的时间更改颜色主题(日落后将应用深色主题 - 日出时将根据用户偏好应用蓝色/浅色主题) )。
我可以使用更改颜色主题WriteableSettingsStore
暴露于一个ShellSettingsManager
目的。当我执行以下代码时,重新启动 Visual Studio 后主题会发生变化。
var settingsManager = new ShellSettingsManager(this);
var writeableUserStore = settingsManager.GetWritableSettingsStore(SettingsScope.UserSettings);
writeableUserStore.SetString("General", "CurrentTheme", GuidList.guidDarkTheme);
我更喜欢的是让主题自动更新 - 我尝试过使用UpdateWindow
and RedrawWindow
User32 API 的功能,但窗口不会重新加载。
所以问题是 - 在更改注册表中的 CurrentTheme 属性后如何“重绘”Visual Studio?
ShellSettingsManager
使您能够访问和修改 Visual Studio 设置,但只能在 Windows 注册表中进行。在重新启动之前,Visual Studio 不会接受您所做的任何更改,因为 VS 仅在启动时才从注册表中读取设置。所以这是错误的做法。
要更改设置并应用它们而不需要重新启动,您必须使用DTE2.属性 https://msdn.microsoft.com/en-us/library/9kw2wy60.aspx正如所讨论的here https://msdn.microsoft.com/en-us/library/awdwz11a.aspx。以下代码片段显示了可以从“环境/常规”页面以编程方式更改的所有设置(您可以在此处更改主题):
EnvDTE.Properties generalProps = dte2Obj.Properties["Environment", "General"];
for (int i = 1; i <= generalProps.Count; ++i)
{
System.Diagnostics.Debug.WriteLine(
generalProps.Item(i).Name + ": " + generalProps.Item(i).Value);
}
默认情况下,在 VS2013 中,此代码将产生以下输出:
AnimationSpeed: 5
RichClientExperienceOptions: 65535
WindowMenuContainsNItems: 10
CloseButtonActiveTabOnly: True
UseTitleCaseOnMenu: False
AutoAdjustExperience: True
Animations: True
AutohidePinActiveTabOnly: False
ShowStatusBar: True
MRUListContainsNItems: 10
所有这些设置都可以更改,VS 将立即应用更改。问题是没有任何属性可以让您更改主题。这就是为什么我认为这是不可能做到的。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)