Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

425
Vistas
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 Respuestas
Responde la pregunta

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 Denunciar

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 Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda