- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在 VS 中使用 Package 类上的这个属性公开了一个工具窗口:
[ProvideToolWindow(typeof(MyToolWindow),
Style = VsDockStyle.Tabbed,
Orientation = ToolWindowOrientation.Right)]
这工作正常,我可以使用以下代码以编程方式打开它:
private void ShowToolWindow()
{
//this method will show the window if it's not active or bring it to front if it's collapsed
ToolWindowPane window = this.FindToolWindow(typeof(MyToolWindow), 0, true);
if ((null == window) || (null == window.Frame))
{
throw new NotSupportedException();
}
IVsWindowFrame windowFrame = (IVsWindowFrame)window.Frame;
Microsoft.VisualStudio.ErrorHandler.ThrowOnFailure(windowFrame.Show());
}
然而,当用户意外关闭窗口时,无法将其恢复。我想知道其他扩展如何将它添加到工具 -> 其他 Windows,例如 NuGet。我在 NuGet 源代码中找不到任何明显的内容。
最佳答案
您需要添加一个调用 ShowToolWindow 例程的命令。
包的顶部 vsct 文件将需要几个外部引用:
<!--This is the file that defines the IDs for all the commands exposed by VisualStudio. -->
<Extern href="stdidcmd.h"/>
<!--This header contains the command ids for the menus provided by the shell. -->
<Extern href="vsshlids.h"/>
这个文件应该定义一些符号:
<Symbols>
<!-- Use your package guid. -->
<GuidSymbol name="guidPackage" value="{00000000-0000-0000-0000-000000000000}" />
<!-- Use a new GUID to uniquely identify your package commands -->
<GuidSymbol name="guidCmdSet" value="{11111111-1111-1111-1111-111111111111}">
<IDSymbol name="cmdidViewMyToolWindow" value="0x0500" />
</GuidSymbol>
</Symbols>
在包的 vsct 文件的 Buttons
block 中,添加如下内容:
<Button guid="guidCmdSet" id="cmdidViewMyToolWindow" priority="0x0100" type="Button">
<!--IDG_VS_WNDO_OTRWNDWS0 is the first group in "View|Other Windows". See
C:\Program Files (x86)\Microsoft Visual Studio 2010 SDK SP1\VisualStudioIntegration\Common\Inc
for other options. -->
<Parent guid="guidSHLMainMenu" id="IDG_VS_WNDO_OTRWNDWS0"/>
<CommandFlag>DynamicVisibility</CommandFlag>
<CommandFlag>DefaultInvisible</CommandFlag>
<Strings>
<ButtonText>View &My Tool Window</ButtonText>
</Strings>
</Button>
所有这些都应该使“查看我的工具窗口”出现在“查看”菜单的顶部。现在您需要在有人点击它时采取行动。
您的包应该实现 IOleCommandTarget
来处理命令可见性和启用:
public class MyPackage : Package, IOleCommandTarget
{
#region IOleCommandTarget implementation
/// <summary>
/// The VS shell calls this function to know if a menu item should be visible and
/// if it should be enabled/disabled.
/// This is called only when the package is active.
/// </summary>
/// <param name="guidCmdGroup">Guid describing which set of commands the current command(s) belong to</param>
/// <param name="cCmds">Number of commands for which status are being asked</param>
/// <param name="prgCmds">Information for each command</param>
/// <param name="pCmdText">Used to dynamically change the command text</param>
/// <returns>HRESULT</returns>
public int QueryStatus(ref Guid guidCmdGroup, uint cCmds, OLECMD[] prgCmds, IntPtr pCmdText)
{
// Filter out commands that are not defined by this package
if ( guidCmdGroup != new Guid("{00000000-0000-0000-0000-000000000000}"))
return (int)(Constants.OLECMDERR_E_NOTSUPPORTED);
if ( cCmds == 0 || prgCmds == null || prgCmds.Length == 0 || cCmds != prgCmds.Length )
return VSConstants.E_INVALIDARG;
// Show and enable all commands.
OLECMDF cmdf = OLECMDF.OLECMDF_SUPPORTED | OLECMDF.OLECMDF_ENABLED;
for ( int i = 0; i < cCmds; i++ )
prgCmds[i].cmdf = (uint)cmdf;
return VSConstants.S_OK;
}
#endregion
}
最后,在您的包初始化例程中,您告诉 shell 当您的命令被点击时要做什么:
protected override void Initialize()
{
base.Initialize();
// Add our command handlers (commands must exist in the .vsct file)
OleMenuCommandService mcs = GetService(typeof(IMenuCommandService)) as OleMenuCommandService;
if ( null != mcs )
{
// "View My Tool Window" command callback
CommandID menuCommandID = new CommandID(new Guid("{11111111-1111-1111-1111-111111111111}"), (int)0x500);
MenuCommand menuItem = new MenuCommand(ShowToolWindow, menuCommandID);
mcs.AddCommand(menuItem);
}
}
在“真实”代码中,您可能希望在 C# 中定义一些与 vsct 中定义的符号匹配的 GUID 常量,并在整个过程中使用它们。
关于c# - VSIX:将工具窗口添加到“查看”->“其他窗口”,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13665970/
我正在尝试自定义 Visual Studio 2010 的起始页。我已从 Microsoft 下载了自定义起始页项目模板来执行此操作。 http://visualstudiogallery.msdn.
我正在为我的项目创建自定义测试运行器。所以我创建了一个可以在 Visual Studio 中注册的测试 vsix 项目。 我也知道我通过 F5 加载了扩展,然后加载了 Visual Studio 的实
标题说明了一切:如何“提取”一个 .vsix 文件? 我正在遵循教程并将其声明为步骤,但我不理解它并且它不容易用谷歌搜索。 最佳答案 将文件扩展名重命名为 .zip,瞧,就像普通的 zip 一样解压它
当用户安装我的扩展程序但未安装最新的 Visual Studio 更新时,扩展程序无法解析 Microsoft.CodeAnalysis.CSharp.dll 带有以下消息: Could not lo
我已经通过 Code Refactoring (CodeRefactoringProvider) roslyn 项目创建了一个具有一些不错的重构功能的 Visual Studio 扩展,但是在添加工具
说明 我开发了一个 Visual Studio 扩展(VSPackage),它向 Visual Studio 添加了一个新的项目类型(使用 CPS Project System)。我还向 VSPack
我正在为我公司的 MVC 4 应用程序创建自定义 VSTemplate,它使用的向导与创建新 MVC4 应用程序时出现的向导相当。我有两个模板之一,我想在开发人员创建此类新应用时应用,如下所示: 这两
我需要 issgin CTRL+F12 和 CTRL+G 此代码不起作用 但是这段代码有效 为什么不工作? 如何分配 CTRL+F12 和 CTRL+G? 最佳答案 使用代码设置绑
我有安装了 SP1 的 VS2010。我仍然没有在“新建项目”对话框中获得 VSIX 项目模板。 我也提到了以下问题,但没有运气 Can't find VSIX Project Type in VS
我正在尝试创建一个 Visual Studio 2017 扩展,只是为了好玩并了解 VS 扩展性的工作原理。 我的扩展必须可以从“解决方案资源管理器”选项卡中用作上下文菜单按钮,但我想将它包含在非根菜
我刚刚在我的计算机上安装了 VS 2013 SDK,它在 VisualStudio 2013 ultimate 旁边运行 Windows 7。 所以我在“添加项目”对话框中列出了所有可扩展性项目模板。
我已经创建了一个 ItemTemplate 项目。我想将其安装到自定义文件夹中。当我手动将从项目构建的 zip 文件添加到 ItemTemplates 中我命名的文件夹时,这工作正常。 我现在使用两个
我在 visual studio 2019 中下载了扩展,但在安装时出现错误。 安装日志是这样的: 4/25/2021 8:41:33 PM - Microsoft VSIX Installer
我最近下载了Visual Studio 2012的主题,文件以.vsix结尾。我在Internet上进行了检查,但是找不到程序名称Vsix Installer。有人可以告诉我如何安装.vsix文件吗?
我尝试在 Visual Studio 2017 社区离线安装 objc-syntax-highlighting.vsix。我无法解决它。我从 https://github.com/Microsoft/
是否可以在 VSIX 容器中包含一些预定义的文件,然后通过扩展访问它们? 最佳答案 在 .vsixmanifest 设计器中选择 Assets - New - Select type and file
我正在编写一个 VSIX 项目,我希望代码能够确定更新是否可用。 我知道 Visual Studio 能够检查更新,但是,我希望扩展能够更详细地提示用户(开发人员)。 我想知道如何让扩展从包 list
我已经为 Visual Studio 开发了一个 VSPackage。我遵循了这些演练中的所有说明: Part 1 - Creating a Basic Project System Part 2 -
由于 R# 不支持 Roslyn 早期预览版 C# 6.0 功能,因此代码看起来非常乏味... 我想使用分类器 VSIX 为代码着色。是否可以从 Roslyn 语言服务获取当前文档的语义模型? 最佳答
安装 Visual Studio 2017 后,我可以在这个 Vs 包上工作一个月左右,直到第一次更新。现在,在我重建此 Visual Studio 包并尝试安装 VSIX 后,我收到一条消息,指出它
我是一名优秀的程序员,十分优秀!