6 Stimmen

VSX - Festlegen der Anfangsposition eines anzudockenden ToolWindowPanes

Ich erstelle ein Visual Studio-Paket, das ein Toolfenster bereitstellt, und versuche sicherzustellen, dass es an den linken Rand des Visual Studio-Hauptfensters angedockt angezeigt wird, wenn das Paket zum ersten Mal geladen wird.

[ProvideToolWindow(typeof(MyToolWindow), Orientation = ToolWindowOrientation.Left, 
    Style=VsDockStyle.Linked, Window=EnvDTE.Constants.vsWindowKindLinkedWindowFrame)])]
[ProvideToolWindowVisibility(typeof(MyToolWindow), VSConstants.UICONTEXT.NoSolution_string)]
public class MyPackage : Package
{
    ...

Ich habe versucht viele Variationen der oben genannten Möglichkeiten, aber das Beste, was ich bisher erreicht habe, ist, dass das Fenster an den Bildschirm angedockt ist. unten - und selbst dann wird jedes Mal, wenn das Paket neu geladen wird, neu angedockt, anstatt die Position des Benutzerfensters beizubehalten.

Wie kann ich festlegen, dass mein Fensterbereich anfangs links vom Hauptfenster angedockt angezeigt wird?

3voto

Steve Cadwallader Punkte 2566

Das Einrichten von Elementen als VsDockStyle.Tabbed wird unterstützt, so dass Sie sich an das Toolbox-Werkzeugfenster anhängen könnten. Aber ich vermute, Sie haben bereits daran gedacht und es passt nicht zu Ihrer Situation.

Auch wenn dies keine schöne Lösung ist, können Sie diese Abhilfe versuchen.

  1. Richten Sie das ProvideToolWindow mit der gewünschten Ausrichtung und dem gewünschten Fenster ein, aber setzen Sie den Stil auf Float, da Linked nicht unterstützt wird (http://msdn.microsoft.com/en-us/library/microsoft.visualstudio.shell.vsdockstyle.aspx):

    [ProvideToolWindow(typeof(MyToolWindow), Style = VsDockStyle.Float, Orientation = ToolWindowOrientation.Left, Window = EnvDTE.Constants.vsWindowKindMainWindow)]
  2. Docken Sie das Werkzeugfenster zur Laufzeit an, wenn Sie feststellen, dass es sich in einem schwebenden Zustand befindet:

    /// <summary>
    /// Docks the specified frame window if it is currently floating.
    /// </summary>
    /// <remarks>
    /// Works in VS2010, does not appear to work in VS2008.
    /// </remarks>
    /// <param name="frame">The frame.</param>
    private static void DockWindowIfFloating(IVsWindowFrame frame)
    {
        // Get the current tool window frame mode.
        object currentFrameMode;
        frame.GetProperty((int)__VSFPROPID.VSFPROPID_FrameMode, out currentFrameMode);
    
        // If currently floating, switch to dock mode.
        if ((VSFRAMEMODE)currentFrameMode == VSFRAMEMODE.VSFM_Float)
        {
            frame.SetProperty((int)__VSFPROPID.VSFPROPID_FrameMode, VSFRAMEMODE.VSFM_Dock);
        }
    }

Wie ich in den Anmerkungen erwähnt habe, scheint dies nur für VS2010 (nicht VS2008) zu funktionieren.

Ich hoffe, es hilft, so hakelig es auch ist.

3voto

Cameron Punkte 91138

Wenn Sie möchten, dass es standardmäßig am unteren Rand mit den anderen Fenstern wie dem Ausgabefenster, der Fehlerliste, den Suchergebnissen usw. angedockt ist, können Sie dies wie folgt erreichen:

[ProvideToolWindow(typeof(ThePane),
                   Orientation=ToolWindowOrientation.Right,
                   Window=EnvDTE.Constants.vsWindowKindOutput,
                   Style=VsDockStyle.Tabbed)]

Die Ausrichtung scheint jedoch keinen Unterschied zu machen, sie erscheint immer links. Aber für mich ist das nahe genug.

0voto

Thomas Punkte 379

Ich weiß nicht, ob das funktioniert, aber Sie können es ja mal ausprobieren:

Ich habe in der Registrierung nach einem Hinweis darauf gesucht, wo das SolutionExplorer-Werkzeugfenster angedockt ist und fand, dass der Window-Parameter "DocumentWell" enthält

Sie können also Folgendes versuchen:

[ProvideToolWindow(typeof(MyToolWindow), Orientation = ToolWindowOrientation.Right, Style=VsDockStyle.Tabbed, Window="DocumentWell")])]

または

Window=EnvDTE.Constants.vsWindowKindMainWindow

Ich hoffe, das hilft,

Thomas.

0voto

Shakaron Punkte 897
// Replace EnvDTE.Constants.vsWindowKindSolutionExplorer with the GUID you need.
[ProvideToolWindow(typeof(IssuesWindow), Style = VsDockStyle.Tabbed, Window = EnvDTE.Constants.vsWindowKindSolutionExplorer)]

Dies funktioniert gut auf Visual Studio 2015. Getestet auf einer virtuellen Maschine.

Es gibt jedoch eine Begrenzung : Das Werkzeugfenster wird nur beim allerersten Start der IDE mit Ihrer Erweiterung angedockt. Es ist einfach, mit einer virtuellen Maschine zu testen, da Sie einfach einen vorherigen Zustand wiederherstellen. Ich vermute, dass ein Registry-Wert geschrieben wird und Visual Studio sich beim nächsten Mal eher an die vorherige Position des Werkzeugfensters erinnert, als die Standardeinstellungen zu verwenden, die Sie gerade oben angegeben haben.

Wenn jemand möchte, könnte er die Vorher-/Nachher-Versionen der Registrierung vergleichen und diese eingestellten Werte finden und sie beim nächsten Mal/bei Bedarf manuell zurücksetzen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X