簡體   English   中英

Visual Studio擴展:如何在選項卡鏈接組中找到哪個工具窗口位於前台?

[英]Visual Studio extension: How do I find which tool window is in the foreground in a tab link group?

在Visual Studio中,您可以將工具窗口組合在一起,並通過其選項卡進行標識。 例如,您可能在文檔下方的面板中將“輸出”,“錯誤列表”和“查找結果1”工具窗口組合在一起。 當您單擊“輸出”選項卡時,它會出現在前台並抓住焦點。 如果單擊返回到文檔窗口,則“輸出”選項卡仍位於頂部(在前台)。

當給定一組窗口中的一個窗口時,如何以編程方式(在VS擴展中)確定(1)哪個窗口在同一選項卡組中,以及(2)哪個窗口在前景中?

這是枚舉所有窗口的代碼示例:

    var dte = (EnvDTE.DTE)GetService(typeof(EnvDTE.DTE));
    var windowOutput = dte.Windows.Item(EnvDTE.Constants.vsWindowKindOutput);
    foreach (EnvDTE.Window w in windowOutput.LinkedWindowFrame.Collection)
    {
        //gives every window, not just those grouped together
    }

您可以通過首先遍歷所有EnvDTE窗口( Window / Window2 ),獲取相應的IVsWindowFrame以及訂閱幀通知( IVsWindowFrameNotify )來找出切換選項卡的時間,以便在選項卡更改時得到通知。 但這仍然對選項卡組(“鏈接的框架”)無濟於事,更不用說使窗口框架偵聽器保持最新狀態(在選項卡打開/關閉等時)了。

我能想到的唯一可靠的事情是將設置導出到XML(VS這樣做是為了在運行時保留布局),操縱XML,然后再導入它。 我不確定這將有多快,但是值得一試。 您可以在.vssettings文件中搜索Environment_WindowLayout ,以查看XML的示例。 實際上,此信息的導出/導入非常棘手-您可以使用EnvDTE.Properties集合來試試運氣,也許IVsUIShellDocumentWindowMgr( 示例 )會派上用場,但也許沒有用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM