[英]Changing “Color theme” within a Visual Studio Extension
我正在用C#編寫一個Visual Studio擴展,希望能根據一天中的時間改變顏色主題(日落之后將應用黑暗主題 - 在日出時,將根據用戶偏好應用藍色/淺色主題)。
我可以使用ShellSettingsManager
對象公開的WriteableSettingsStore
更改顏色主題。 當我執行以下代碼時,重新啟動Visual Studio后主題更改。
var settingsManager = new ShellSettingsManager(this);
var writeableUserStore = settingsManager.GetWritableSettingsStore(SettingsScope.UserSettings);
writeableUserStore.SetString("General", "CurrentTheme", GuidList.guidDarkTheme);
我更喜歡的是自動更新主題 - 我嘗試使用User32 API的UpdateWindow
和RedrawWindow
函數,但窗口沒有重新加載。
所以問題是 - 在更改注冊表中的CurrentTheme屬性后,如何“重繪”Visual Studio?
ShellSettingsManager
使您可以訪問和修改Visual Studio設置,但僅限於Windows注冊表。 在重新啟動之前,Visual Studio將不會選擇您所做的任何更改,因為VS僅在啟動時才從注冊表中讀取設置。 所以這是錯誤的做法。
既要更改設置並應用它們無需重啟,你將不得不使用DTE2.Properties在討論這里 。 以下代碼段顯示了可以從“環境/常規”頁面以編程方式更改的所有設置(您可以在此處更改主題):
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將立即應用更改。 問題是沒有可以讓您更改主題的屬性。 這就是我認為無法做到的原因。
這是最簡單的方法:
概述:
細節:
要創建兩個設置文件:
要以編程方式導入這些文件,請使用帶有“/ import”參數的DTE.ExecuteCommand,如下所示:
如果您還沒有EnvDTE.dll,請添加對EnvDTE.dll的引用。
var dte = GetService(typeof(EnvDTE._DTE)) as EnvDTE.DTE;
dte.ExecuteCommand("Tools.ImportandExportSettings", @"/import:""C:\yourpath\LightTheme.vssettings""");
我希望有所幫助。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.