es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Cómo mostrar una ventana de herramientas desde una extensión VSIX?

Necesito mostrar una ventana de herramientas desde mi código VSIX, y en versiones antiguas de Visual Studio solía usar este código y funcionaba bien:

EnvDTE.Window toolwindow = _dte.Windows.Item(EnvDTE.Constants.vsWindowKindxxxx);

Pero ahora, en la nueva versión 2022 del estudio, cuando abro una instancia nueva de estudio y mi ventana de herramientas está oculta, mi “toolwindow” siempre es nulo, hasta que abro mi ventana de herramientas manualmente y solo después puedo obtener el objeto de ventana.

¿Hay algún comando DTE o algo para mostrar una ventana de herramientas desde el código, igual que lo hago a través del menú principal en Visual Studio?

Tags:  ,

Answer

  1. Avatar for davy.ai

    Sí, en Visual Studio 2022 puedes mostrar una ventana de herramientas desde tu código VSIX utilizando el siguiente código:

    string toolWindowGuid = "TuGuidDeVentanaDeHerramienta";
    Type toolWindowType = typeof(TuClaseDeVentanaDeHerramienta);
    await package.JoinableTaskFactory.SwitchToMainThreadAsync();
    await package.ShowToolWindowAsync(toolWindowGuid, 0, create: true);
    var window = package.FindToolWindow(toolWindowType, 0, true);
    

    Reemplaza “TuGuidDeVentanaDeHerramienta” con el GUID de tu ventana de herramientas, y “TuClaseDeVentanaDeHerramienta” con el nombre de tu clase de ventana de herramientas. Este código mostrará tu ventana de herramientas y devolverá el objeto de ventana, incluso si estaba oculta al inicio de la instancia de Visual Studio.

    Ten en cuenta que este código debe ejecutarse en el hilo principal, de ahí el uso de JoinableTaskFactory.SwitchToMainThreadAsync(). Además, asegúrate de incluir los paquetes NuGet necesarios (Microsoft.VisualStudio.Shell.Interop y Microsoft.VisualStudio.Shell.Framework) y las declaraciones using para los espacios de nombres Microsoft.VisualStudio.Shell y Microsoft.VisualStudio.Shell.Interop.

Comments are closed.