共用方式為


如何: 開啟動態的工具視窗

工具視窗通常會開啟指令在功能表上或對等的鍵盤快速鍵。 有些時候,不過,您可能需要以特定的使用者介面 (UI) 內容套用,以及當不再套用 UI 內容時,關閉時,便會開啟 [工具] 視窗。 這類的工具視窗會呼叫動態 或 自動可見。

注意事項注意事項

如需預先定義的 UI 內容的清單,請參閱VSConstants ,並尋找以 UICONTEXT_ 開頭的欄位。

如果您想要開啟在啟動時,動態的工具視窗而且有可能建立失敗,您必須實作IVsPackageDynamicToolOwnerEx介面,並測試失敗狀況,在QueryShowTool方法。 為了讓命令介面知道要在啟動時開啟僅供動態的工具視窗,您必須將SupportsDynamicToolOwner (設為 1) 的封裝登錄的值。 這個值不是標準的PackageRegistrationAttribute,所以您必須建立自訂的屬性,以將它加入。 如需自訂屬性的詳細資訊,請參閱註冊副檔名使用自訂的註冊屬性

使用FindToolWindow開啟工具視窗。 必要時,會建立工具視窗。

注意事項注意事項

若為動態的工具視窗可以關閉使用者。如果您想要建立功能表命令,讓使用者可以重新開啟工具視窗,就應該啟用功能表命令會開啟 [工具] 視窗中,並停用其他方式的相同 UI 內容中。

若要開啟一個動態的工具視窗

  1. 建立 [工具] 視窗窗格、 圖文框,以及如何實作這些 VSPackage。 如需詳細資訊,請參閱 How to: 建立工具視窗

  2. 註冊與工具視窗Visual Studio加上ProvideToolWindowAttributeProvideToolWindowVisibilityAttribute ,提供它的 VSPackage。

    <ProvideToolWindow(GetType(DynamicWindowPane), PositionX:=250, PositionY:=250, Width:=160, Height:=180, Transient:=True), _
     ProvideToolWindowVisibility(GetType(DynamicWindowPane), "f1536ef8-92ec-443c-9ed7-fdadf150da82"), _
     ProvideMenuResource(1000, 1), _
     DefaultRegistryRoot("Software\Microsoft\VisualStudio\8.0Exp"), _
     PackageRegistration(UseManagedResourcesOnly:=True), _
     Guid("01069CDD-95CE-4620-AC21-DDFF6C57F012")> _
    Public Class PackageToolWindow
        Inherits Package
    
    [ProvideToolWindow(typeof(DynamicWindowPane), PositionX = 250, PositionY = 250, Width = 160, Height = 180, Transient = true)]
    [ProvideToolWindowVisibility(typeof(DynamicWindowPane), /*UICONTEXT_SolutionExists*/"f1536ef8-92ec-443c-9ed7-fdadf150da82")]
    [ProvideMenuResource(1000, 1)]
    [DefaultRegistryRoot(@"Software\Microsoft\VisualStudio\8.0Exp")]
    [PackageRegistration(UseManagedResourcesOnly = true)]
    [Guid("01069CDD-95CE-4620-AC21-DDFF6C57F012")]
    public class PackageToolWindow : Package 
    

    這會註冊為暫時性的視窗,並不會保留為 DynamicWindowPane 的工具視窗時Visual Studio關閉後再重新開啟。 DynamicWindowPane 是 UICONTEXT_SolutionExists 套用的文字,只要開啟,否則關閉。 指定預設的位置和大小。 如需詳細資訊,請參閱 How to: 登錄工具視窗

  3. 使用FindToolWindow來找出 [工具] 視窗窗格,或如果不存在,請建立它。

    ' Get the (only) instance. 
    ' The last flag is set to true so that if the tool window does not exists it will be created. 
    Dim window As ToolWindowPane = Me.FindToolWindow(GetType(DynamicWindowPane), 0, True)
    If (window Is Nothing) Or (window.Frame Is Nothing) Then 
        Throw New NotSupportedException(Resources.CanNotCreateWindow)
    End If
    
    // Get the (only) instance of this tool window. 
    // The last flag is set to true so that if the tool window does not exists it will be created.
    ToolWindowPane window = this.FindToolWindow(typeof(DynamicWindowPane), 0, true);
    if ((null == window) || (null == window.Frame))
    {
        throw new NotSupportedException(Resources.CanNotCreateWindow);
    }
    
  4. 從 [工具] 視窗窗格取得工具視窗外框。

    Dim windowFrame As IVsWindowFrame = TryCast(window.Frame, IVsWindowFrame)
    
    IVsWindowFrame windowFrame = (IVsWindowFrame)window.Frame;
    
  5. 顯示 [工具] 視窗。

    Microsoft.VisualStudio.ErrorHandler.ThrowOnFailure(windowFrame.Show())
    
    ErrorHandler.ThrowOnFailure(windowFrame.Show());
    

請參閱

概念

VSPackage 基本資訊