ホットキーで配色を切り替えることができる Visual Studio 2008 用のアドインを作成しています。
配色を正常に読み込んで適用することができましたが、非常に遅いです。
スキームを適用するコードは次のとおりです。
// The Theme class is a holder for a color scheme
private static void LoadTheme(Theme theme, DTE2 application)
{
var items = GetItems(application);
foreach (var item in items)
{
if (!theme.Properties.ContainsKey(item.Name)) continue;
var prop = theme.Properties[item.Name];
item.Background = prop.Background;
item.Foreground = prop.Foreground;
item.Bold = prop.Bold;
}
}
private static IEnumerable<ColorableItems> GetItems(DTE2 application)
{
var fontsAndColorsItems = (FontsAndColorsItems) application
.get_Properties("FontsAndColors", "TextEditor")
.Item("FontsAndColorsItems")
.Object;
return fontsAndColorsItems.Cast<ColorableItems>();
}
基本的に、GetItems は Visual Studio のオプションから ColorableItems のリストを取得します。これらの項目のいずれかにプロパティを設定すると、変更がすぐに VS に適用されます。配色には 100 を超えるプロパティを含めることができるため、300 以上の更新操作が必要になり、非常に長い時間がかかります (私のラップトップでは 10 秒以上)。
プロパティを更新している間は更新しないようにVSに伝えたいのですが、完了したら更新するように指示しますが、それを行う方法が見つかりません。
理想的には、VS ウィザードで設定のインポート/エクスポートを実行する場合と同様に、プロセス全体に 1 ~ 2 秒かかります。
私は代替アプローチにもオープンです。レジストリ設定を単純に上書きするという考えがありましたが、VSにその設定を強制的にリロードさせる方法が必要です。