2015-07-13 33 views
16

Tôi đang viết một phần mở rộng Visual Studio trong C# mà tôi hy vọng sẽ thay đổi chủ đề màu sắc tùy theo thời gian trong ngày (Sau khi mặt trời lặn, chủ đề tối sẽ được áp dụng - lúc mặt trời mọc chủ đề màu xanh/ánh sáng sẽ được áp dụng tùy thuộc vào tùy chọn của người dùng).Thay đổi "Chủ đề màu" trong một Visual Studio Extension

Tôi có thể thay đổi chủ đề màu bằng cách sử dụng WriteableSettingsStore được phơi sáng bởi đối tượng ShellSettingsManager. Khi tôi thực thi đoạn mã sau, chủ đề thay đổi sau khi khởi động lại Visual Studio.

var settingsManager = new ShellSettingsManager(this); 
var writeableUserStore = settingsManager.GetWritableSettingsStore(SettingsScope.UserSettings); 

writeableUserStore.SetString("General", "CurrentTheme", GuidList.guidDarkTheme); 

Những gì tôi muốn là phải có bản cập nhật theme tự động - Tôi đã cố gắng tận dụng các UpdateWindowRedrawWindow chức năng của API User32, nhưng cửa sổ không tải lại.

Vì vậy, câu hỏi là - Làm cách nào để "vẽ lại" Visual Studio sau khi thay đổi thuộc tính CurrentTheme trong sổ đăng ký?

Trả lời

11

ShellSettingsManager cho phép bạn truy cập và sửa đổi cài đặt Visual Studio nhưng chỉ trong đăng ký Windows. Bất kỳ thay đổi nào bạn thực hiện sẽ không được chọn bởi Visual Studio cho đến khi nó được khởi động lại vì VS chỉ đọc cài đặt từ sổ đăng ký khi nó bắt đầu. Vì vậy, đây là cách tiếp cận sai lầm.

Để cả hai thay đổi cài đặt và áp dụng chúng mà không yêu cầu khởi động lại, bạn sẽ phải sử dụng DTE2.Properties như được thảo luận trong here. Đoạn mã sau đây cho thấy tất cả các thiết lập có thể được thay đổi theo chương trình từ Môi trường/trang chung (đây là nơi bạn có thể thay đổi chủ đề):

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); 
} 

Theo mặc định trong VS2013, mã này sẽ cho kết quả sau:

AnimationSpeed: 5 
RichClientExperienceOptions: 65535 
WindowMenuContainsNItems: 10 
CloseButtonActiveTabOnly: True 
UseTitleCaseOnMenu: False 
AutoAdjustExperience: True 
Animations: True 
AutohidePinActiveTabOnly: False 
ShowStatusBar: True 
MRUListContainsNItems: 10 

Tất cả các cài đặt này có thể thay đổi và VS sẽ ngay lập tức áp dụng các thay đổi. Vấn đề là không có tài sản cho phép bạn thay đổi chủ đề. Đó là lý do tại sao tôi nghĩ rằng nó không thể được thực hiện.

+1

Chỉ cần thử lại trong VS 2017, cùng một kết quả. –

+0

@ErwinMayer Cảm ơn bạn đã cập nhật. –

2

Đây là cách đơn giản nhất để làm điều đó:

Tổng quan:

  1. Sử dụng "Nhập Cài đặt & xuất khẩu" tính năng để tạo ra hai tập tin: DarkTheme.vssettings và LightTheme.vssettings
  2. Lập trình gọi lệnh Tools.ImportandExportSettings để nhập các tệp đó vào thời điểm thích hợp.

chi tiết:

Để tạo ra hai thiết lập file:

  1. Launch Visual Studio và thiết lập các chủ đề để "Ánh sáng" thông qua giao diện người dùng
  2. Từ menu Tools chọn " Nhập và xuất cài đặt ... "
  3. Trong trình hướng dẫn, hãy chọn" Xuất cài đặt môi trường đã chọn "và nhấp" Tiếp theo "
  4. Trong "Bạn muốn xuất cài đặt nào?"trang, bỏ chọn mọi thứ ngoại trừ" Tùy chọn/Phông chữ và Màu sắc "và nhấp vào" Tiếp theo "
  5. Đặt tên tệp này là" Light.vssettings "và lưu nó ở một vị trí đã biết. . chủ đề, đặt tên cho tập tin "Dark.vssettings"

để nhập những tập tin lập trình sử dụng DTE.ExecuteCommand với "/ nhập khẩu" thông số như thế này:

Thêm một tham chiếu đến EnvDTE.dll nếu bạn don chưa có nó.

var dte = GetService(typeof(EnvDTE._DTE)) as EnvDTE.DTE; 
dte.ExecuteCommand("Tools.ImportandExportSettings", @"/import:""C:\yourpath\LightTheme.vssettings"""); 

Tôi hy vọng điều đó sẽ hữu ích.

Các vấn đề liên quan