Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

437
Views
Cambiar el "tema de color" dentro de una extensión de Visual Studio

Estoy escribiendo una extensión de Visual Studio en C# que espero cambie el tema de color dependiendo de la hora del día (después de la puesta del sol se aplicará el tema oscuro - al amanecer se aplicará el tema azul/claro dependiendo de la preferencia de los usuarios ).

Puedo cambiar el tema de color usando WriteableSettingsStore expuesto por un objeto ShellSettingsManager . Cuando ejecuto el siguiente código, el tema cambia después de reiniciar Visual Studio.

 var settingsManager = new ShellSettingsManager(this); var writeableUserStore = settingsManager.GetWritableSettingsStore(SettingsScope.UserSettings); writeableUserStore.SetString("General", "CurrentTheme", GuidList.guidDarkTheme);

Lo que preferiría es que el tema se actualice automáticamente: he intentado utilizar las funciones UpdateWindow y RedrawWindow de la API User32, pero la ventana no se vuelve a cargar.

Entonces, la pregunta es: ¿cómo "redibujo" Visual Studio después de cambiar la propiedad CurrentTheme en el registro?

over 4 years ago · Santiago Trujillo
2 answers
Answer question

0

ShellSettingsManager le permite acceder y modificar la configuración de Visual Studio, pero solo en el registro de Windows. Cualquier cambio que realice no será recogido por Visual Studio hasta que se reinicie porque VS lee la configuración del registro solo cuando se inicia. Así que este es el enfoque equivocado.

Para cambiar la configuración y aplicarla sin necesidad de reiniciar, deberá usar DTE2.Properties como se describe aquí . El siguiente fragmento de código muestra todas las configuraciones que se pueden cambiar mediante programación desde la página Entorno/General (aquí es donde puede cambiar el tema):

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

De forma predeterminada en VS2013, este código producirá el siguiente resultado:

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

Todas estas configuraciones se pueden cambiar y VS aplicará inmediatamente los cambios. El problema es que no hay ninguna propiedad que te permita cambiar el tema. Por eso creo que no se puede hacer.

over 4 years ago · Santiago Trujillo Report

0

Esta es la forma más sencilla de hacerlo:

Visión de conjunto:

  1. Utilice la función "Configuración de importación y exportación" para crear dos archivos: DarkTheme.vssettings y LightTheme.vssettings
  2. Invoque mediante programación el comando Tools.ImportandExportSettings para importar esos archivos en el momento apropiado.

Detalles:

Para crear los dos archivos de configuración:

  1. Inicie Visual Studio y establezca el tema en "Light" a través de la interfaz de usuario
  2. En el menú Herramientas, seleccione "Configuración de importación y exportación..."
  3. En el asistente, seleccione "Exportar la configuración del entorno seleccionada" y haga clic en "Siguiente"
  4. En "¿Qué configuración desea exportar?" página, anule la selección de todo excepto "Opciones/Fuentes y colores" y haga clic en "Siguiente"
  5. Nombre este archivo "Light.vssettings" y guárdelo en una ubicación conocida.
  6. Repita los pasos del 1 al 5 para el tema "Oscuro", nombrando el archivo "Dark.vssettings".

Para importar estos archivos mediante programación, use DTE.ExecuteCommand con el parámetro "/importar" de esta manera:

Agregue una referencia a EnvDTE.dll si aún no la tiene.

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

Espero que eso ayude.

over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!