工具窗口概述

您所在的位置:网站首页 cs术语 工具窗口概述

工具窗口概述

2023-05-26 05:11| 来源: 网络整理| 查看: 265

创建 Visual Studio 工具窗口 项目 05/20/2023

工具窗口是向 Visual Studio 添加复杂 UI 和交互的一种方法。 它们通常提供与各种 API 和功能交互的用户友好方式。 例如,解决方案资源管理器工具窗口提供基于树的当前项目/解决方案/文件夹视图,并提供用于打开、重命名和创建文件的简单手势。

工具窗口是单实例,这意味着一次只能打开工具窗口的一个实例。 当工具窗口在 IDE 中关闭时,它只会明显隐藏,而不是像文档一样完全关闭和释放。

入门

若要开始,请按照 创建第一个扩展 教程进行操作。

使用工具窗口

本指南旨在介绍使用工具窗口时的热门用户方案:

创建工具窗口 将内容添加到工具窗口 创建命令以显示工具窗口 控制工具窗口的可见性 创建工具窗口

使用新的扩展性模型创建工具窗口非常简单,只需扩展基类 Microsoft.VisualStudio.Extensibility.ToolWindows.ToolWindow 并使用属性 Microsoft.VisualStudio.Extensibility.VisualStudioContribution装饰类。

[VisualStudioContribution] public class MyToolWindow : ToolWindow ToolWindow 属性

抽象 ToolWindow 类需要实现 ToolWindowConfiguration 配置,该配置具有一些应熟悉的属性:

参数 类型 必须 说明 默认值 定位 ToolWindowPlacement 否 Visual Studio 中首次打开工具窗口的位置。 ToolWindowPlacement.DockedTo 允许将工具窗口停靠到与旧 VSIX 样式工具窗口 ID 匹配的 GUID。 请参阅有关 ToolWindowPlacement 的详细信息。 ToolWindowPlacement.Floating DockDirection 靠接 否 相对于首次打开工具窗口时应停靠的位置的方向。 请参阅 Dock。 Dock.None AllowAutoCreation Bool 否 指定是否可以自动创建工具窗口。 将其设置为 false 意味着在再次打开 Visual Studio 时,关闭 Visual Studio 时打开的工具窗口将不会自动还原。 true 示例 [VisualStudioContribution] public class MyToolWindow : ToolWindow { public MyToolWindow(VisualStudioExtensibility extensibility) : base(extensibility) { this.Title = "My Tool Window"; } public override ToolWindowConfiguration ToolWindowConfiguration => new() { Placement = ToolWindowPlacement.Floating, DockDirection = Dock.Right, AllowAutoCreation = true, }; public override Task GetContentAsync(CancellationToken cancellationToken) { // Create and return a RemoteUserControl } } 将内容添加到工具窗口

由于 VisualStudio.Extensibility 中的扩展可能来自 IDE 进程外,因此我们无法直接将 WPF 用作工具 Windows 中内容的表示层。 相反,将内容添加到工具窗口需要为该控件创建 RemoteUserControl 和相应的数据模板。 虽然下面有一些简单的示例,但我们建议在添加工具窗口内容时阅读 远程 UI 文档 。

[VisualStudioContribution] public class MyToolWindow : ToolWindow { public MyToolWindow(VisualStudioExtensibility extensibility) : base(extensibility) { this.Title = "My Tool Window"; } public override ToolWindowConfiguration ToolWindowConfiguration => new() { Placement = ToolWindowPlacement.DocumentWell, }; public override async Task InitializeAsync(CancellationToken cancellationToken) { // Do any work here that is needed before creating the control. } public override Task GetContentAsync(CancellationToken cancellationToken) { return Task.FromResult(new MyToolWindowControl()); } }

MyToolWindowControl.cs: (这是一个示例文件名,应与数据模板文件具有相同的名称)

internal class MyToolWindowControl : RemoteUserControl { public MyToolWindowControl() : base(dataContext: null) { } }

MyToolWindowControl.xaml (这是一个示例文件名,应与派生自 RemoteUserControl 的类具有相同的名称)

有关创建 RemoteUserControl的详细信息,请参阅远程 UI。

创建命令以显示工具窗口

显示工具窗口的常见机制是添加 一个命令 ,该命令在调用 时通过调用 ShellExtensibility.ShowToolWindowAsync()显示工具窗口。

ShowToolWindowAsync() 具有布尔参数 activate:

当 为 时 true,工具窗口将在 IDE 中和 给定的焦点中可见。 当 为 时 false,工具窗口将在 IDE 中可见,但仅当其他工具窗口处于活动状态时,工具窗口才作为选项卡组中的选项卡可见。 示例 [VisualStudioContribution] public class MyToolWindowCommand : Command { public MyToolWindowCommand(VisualStudioExtensibility extensibility) : base(extensibility) { } public override CommandConfiguration CommandConfiguration => new("My Tool Window") { Placements = new[] { CommandPlacement.KnownPlacements.ToolsMenu }, Icon = new(ImageMoniker.KnownValues.ToolWindow, IconSettings.IconAndText), }; public override async Task ExecuteCommandAsync(IClientContext context, CancellationToken cancellationToken) { await this.Extensibility.Shell().ShowToolWindowAsync(activate: true, cancellationToken); } }

请参阅 命令 文档,详细了解如何创建和使用命令。

控制工具窗口的可见性

除了使用命令之外,控制工具窗口可见性的另一种方法是使用基于规则的激活约束。 这允许在满足某些条件时自动打开工具窗口,并在这些条件不再适用时再次隐藏工具窗口。

ToolWindowVisibleWhenAttribute

属性 Microsoft.VisualStudio.Extensibility.ToolWindows.ToolWindowVisibleWhenAttribute 具有一些应熟悉的参数:

参数 类型 必须 说明 表达式 String 是 一个布尔表达式字符串,如果为 true,则表示上下文处于活动状态,并且将显示工具窗口。 TermNames String[] 是 表达式中使用的术语的名称。 TermValues String[] 是 每个术语的值。 术语值的顺序必须与术语名称数组相同。 示例 // The tool window will be shown if the active document is a .cs file, and // will be hidden if the active document is any any other type of file. public override ToolWindowConfiguration ToolWindowConfiguration => new() { VisibleWhen = ActivationConstraint.ClientContext(ClientContextKey.Shell.ActiveSelectionFileName, @"\.cs$"), };

有关有效术语值的详细信息,请参阅 基于规则的激活约束 。

后续步骤

请务必阅读有关 VisualStudio.Extensibility 框架中 远程 UI 的工作原理。

工具窗口内容是使用 WPF 创建的,因此请参阅 WPF 文档 获取指导。

有关使用工具窗口创建扩展的完整示例,请参阅 ToolWindow 示例。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3