我一直在开发一个Visual Studio扩展作为一个附加在用于VS2008 / 2010。新版本现在要做的VSIX包VS2010只是(因为它是.NET 4反正),和我有一些麻烦与(很简单,我想)UI处理。

扩展主要由一些按钮时启动的各种动作,形式等,并且一些是只用作标记,以显示一些状态信息的工具栏。 “标签”按钮本身只显示非常短的和简明的信息,而工具提示提供更多的细节。

虽然我不认为整个外接事情是非常优雅的,做这种东西是非常简单的(虽然我的做法可能已经有点业余)。当添加命令到工具栏,我将“保存”,在特定的局部变量“标签”按钮,让我以后设置随意的标题和工具提示文本。

在一个VSPackage的,相当于 Microsoft.VisualStudio.CommandBars.CommandBarButton 似乎是 OleMenuCommand 。发现通过 MenuCommandService 是没有问题的,但是根据需要修改它。

“标签”命令

有关找出如何做到这一点的目的,我只是有一组中有两个按钮的工具栏。 btnAction 非常简单;只是一个图标和执行处理程序,以改变在其他按钮,没有任何的commandflags文本。 btnLabel 看起来像这样在.vsct:

<Button guid="guidVSPackageBuilderTutorialCommandSet" id="btnLabel" priority="0x0100">
    <CommandFlag>DefaultDisabled</CommandFlag>
    <CommandFlag>DontCache</CommandFlag>
    <CommandFlag>NoCustomize</CommandFlag>
    <CommandFlag>TextChanges</CommandFlag>
    <CommandFlag>TextOnly</CommandFlag>
    <Strings>
        <CommandName>cmdidbtnLabel</CommandName>
        <ButtonText>btnLabel</ButtonText>
        <MenuText>btnLabel</MenuText>
        <ToolTipText>Tooltip btnLabel</ToolTipText>
    </Strings>
</Button>

本的第一个问题是,当我使用 TextChanges 下,在的ToolTipText 串被忽略并且 ButtonText 最初使用工具提示为好。

有操作按钮的处理程序代码如下所示:

private int iClickCount = 0;

protected override void btnActionExecuteHandler(object sender, EventArgs e)
{
    var svc = GetService(typeof(IMenuCommandService)) as OleMenuCommandService;

    CommandID idBtnLabel = new CommandID(GuidList.guidVSPackageBuilderTutorialCmdSet, (int)PkgCmdIDList.btnLabel);
    var cmd = svc.FindCommand(idBtnLabel) as OleMenuCommand;

    cmd.Text = "Clicked " + (++iClickCount) + " times";
}

此改变的字幕 btnLabel 正如所料,但因为不存在的显式指定工具提示(在 OleMenuCommand 对象只是有一个文本属性,不同于的CommandBarButton ,其具有两个标题的ToolTipText ),工具提示总是被设置为相同的字符串作为标题。据我了解,这是因为与FindCommand()我没有实际得到的UI按钮,但只有基本的命令,它不关心提示。

什么是更令人困惑的是当我使用 TextChangesButton CommandFlag,而不是发生了什么 TextChanges 。该按钮现在将正确显示.vsct定义提示文本,但是当我点击另一个按钮无论是标题还是提示将改变 - 尽管当我检查的 btnLabel 的命令的的文本的属性,它被设置为我所期望的(“被点击的X倍”)。确实的 TextChangesButton 的一种“解耦”的命令和该按钮的属性?如果是这样,其实这就是我想要的(我不关心的命令,没有什么反正执行; btnLabel 的永远是禁用的),但我怎么能访问按钮,其特定的串属性?

我通过不同的IV接口和SV的服务看了,但找不到合适的东西,和文档(和智能感知帮助)似乎并不很广泛的。

有帮助吗?

解决方案

要回答这个问题我自己 - 根据来自森林狼队的人,新的可扩展结构不访问提供方式这样的细节控制这些属性。对于我要实现,有必要去获得DTE对象的保持,发现我的工具栏的老式的方法和我的控制,只是将它们作为CommandBarButtons,正如我在外接一样。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top