2011-03-30 27 views
4

我創建了一個公開工具窗口的Visual Studio包,我試圖確保它顯示停靠在主Visual Studio窗口的左邊緣包首先加載。VSX - 設置一個ToolWindowPanes的初始位置,以便停靠

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

我已經試過以上的許多變化,但最好的我已經成功地實現的是具有窗口停靠在底部 - 而且當時不斷重新對接每次包被重新加載而不是保持用戶窗口的位置。

如何指定我的窗口窗格最初顯示停靠在主窗口的左側?

+0

你有沒有這方面的運氣?實際上我試圖讓一個工具窗口默認停靠在底部。但是,根據MSDN文檔工具窗口不能默認停靠:http://msdn.microsoft.com/en-us/library/microsoft.visualstudio.shell.vsdockstyle.aspx – 2011-06-05 19:33:08

+0

@Steve no我沒有 - 我沒有'沒有注意到這一點,它確實看起來不可能。也許這可以通過完成安裝後註冊表的調整來完成。 – Justin 2011-06-05 21:07:39

回答

0

我不知道,如果這個工程,但你可以試一試:

我看着在註冊表中的線索,以在SolutionExplorer工具窗口停靠和 發現窗口參數包含「 DocumentWell」

所以,你可以試試這個:

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

Window=EnvDTE.Constants.vsWindowKindMainWindow 

希望這會有所幫助,

Thomas。

+0

我試過「DocumentWell」,但它抱怨無效的GUID。 – Justin 2011-04-11 12:31:17

+0

就像一個信息:在VS2013中,「DocumentWell」似乎是Window屬性的有效值。當我嘗試它時它工作得很好。 – 2014-01-06 19:55:44

2

將項目設置爲VsDockStyle.Tabbed,因此您可以掛鉤到Toolbox工具窗口。但我猜你已經想到了這一點,它不適合你的情況。

雖然不是一個漂亮的解決方案,但您可以嘗試此解決方法。

  1. 設置你想要的方向和窗口ProvideToolWindow,但設置樣式爲浮動,因爲鏈接不支持(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. 在運行時,停靠工具窗口,如果你發現它處於浮動狀態:

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

正如我在備註中指出的 - 這似乎只適用於VS2010(不是VS2008)。

希望它可以幫助,因爲它是hacky。

+0

工程就像一個魅力。謝謝,史蒂夫! – 2012-10-11 16:44:28

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

這適用於Visual Studio 2015.在虛擬機上測試。

但是,有一個限制:工具窗口只有在IDE首次啓動擴展時纔會停靠。使用虛擬機進行測試很容易,因爲您只需恢復以前的狀態。我猜一些註冊表值是編寫好的,而Visual Studio會記住下次您的工具窗口的前一個位置,而不是使用上面剛剛指定的默認值。

如果有人想要,我想他們可以在註冊表版本之前/之後進行比較,並找到這些設置值並在下次/按需手動重置它們。

1

如果你想它停靠在底部默認情況下與其他窗口,如輸出窗口,錯誤列表,查找結果等,你可以做這樣的:

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

的方向不會似乎有所作爲,但它似乎總是出現在左側。但足夠接近我。

+0

正是我在找的東西! 我認爲Orientation被忽略,因爲你告訴Visual Studio將它停靠在「它將停靠'Output'窗口的相同位置」,所以它不需要更多的引用。 在Visual Studio 2017中進行測試,備案。 – 2018-01-23 12:30:57