如何: 開啟動態的工具視窗
工具視窗通常會開啟指令在功能表上或對等的鍵盤快速鍵。 有些時候,不過,您可能需要以特定的使用者介面 (UI) 內容套用,以及當不再套用 UI 內容時,關閉時,便會開啟 [工具] 視窗。 這類的工具視窗會呼叫動態 或 自動可見。
注意事項 |
---|
如需預先定義的 UI 內容的清單,請參閱VSConstants ,並尋找以 UICONTEXT_ 開頭的欄位。 |
如果您想要開啟在啟動時,動態的工具視窗而且有可能建立失敗,您必須實作IVsPackageDynamicToolOwnerEx介面,並測試失敗狀況,在QueryShowTool方法。 為了讓命令介面知道要在啟動時開啟僅供動態的工具視窗,您必須將SupportsDynamicToolOwner (設為 1) 的封裝登錄的值。 這個值不是標準的PackageRegistrationAttribute,所以您必須建立自訂的屬性,以將它加入。 如需自訂屬性的詳細資訊,請參閱註冊副檔名使用自訂的註冊屬性。
使用FindToolWindow開啟工具視窗。 必要時,會建立工具視窗。
注意事項 |
---|
若為動態的工具視窗可以關閉使用者。如果您想要建立功能表命令,讓使用者可以重新開啟工具視窗,就應該啟用功能表命令會開啟 [工具] 視窗中,並停用其他方式的相同 UI 內容中。 |
若要開啟一個動態的工具視窗
建立 [工具] 視窗窗格、 圖文框,以及如何實作這些 VSPackage。 如需詳細資訊,請參閱 How to: 建立工具視窗。
註冊與工具視窗Visual Studio加上ProvideToolWindowAttribute和ProvideToolWindowVisibilityAttribute ,提供它的 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: 登錄工具視窗。
使用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); }
從 [工具] 視窗窗格取得工具視窗外框。
Dim windowFrame As IVsWindowFrame = TryCast(window.Frame, IVsWindowFrame)
IVsWindowFrame windowFrame = (IVsWindowFrame)window.Frame;
顯示 [工具] 視窗。
Microsoft.VisualStudio.ErrorHandler.ThrowOnFailure(windowFrame.Show())
ErrorHandler.ThrowOnFailure(windowFrame.Show());