簡體   English   中英

在Visual Studio擴展中更改“顏色主題”

[英]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的UpdateWindowRedrawWindow函數,但窗口沒有重新加載。

所以問題是 - 在更改注冊表中的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將立即應用更改。 問題是沒有可以讓您更改主題的屬性。 這就是我認為無法做到的原因。

這是最簡單的方法:

概述:

  1. 使用“導入和導出設置”功能創建兩個文件:DarkTheme.vssettings和LightTheme.vssettings
  2. 以編程方式調用Tools.ImportandExportSettings命令以在適當的時間導入這些文件。

細節:

要創建兩個設置文件:

  1. 啟動Visual Studio並通過UI將主題設置為“Light”
  2. 從“工具”菜單中選擇“導入和導出設置...”
  3. 在向導中,選擇“導出所選環境設置”,然后單擊“下一步”
  4. 在“您要導出哪些設置?” 頁面,取消選擇“選項/字體和顏色”以外的所有內容,然后單擊“下一步”
  5. 將此文件命名為“Light.vssettings”並將其保存在已知位置。
  6. 對“Dark”主題重復步驟1到5,命名文件“Dark.vssettings”。

要以編程方式導入這些文件,請使用帶有“/ 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM