【问题标题】:State driven menuitem in Visual Studio 2012 extensionVisual Studio 2012 扩展中的状态驱动菜单项
【发布时间】:2013-01-26 16:29:09
【问题描述】:

我正在编写一个 Visual Studio 2012 扩展,它定义了几个子菜单以进入两个现有的 Visual Studio 上下文菜单。子菜单项似乎可以正常工作,除了一件事:

在单击我的包中的第一个菜单项之前,每个菜单项的状态都是其默认状态,具体取决于其在 VSCT 文件中的定义。这适用于始终启用的菜单项,但应根据某些变化条件启用或禁用某些菜单项。安装包后,它们的状态设置正确,但是如何在单击第一项之前正确设置状态?

我的解决方案中没有默认状态。我的菜单第一次出现时,条件可能为真或假。

如果您对此有解决方案,或者知道某处的教程中已解决此问题,我将不胜感激。

【问题讨论】:

  • 这些菜单项适用于什么上下文?它们是用于文本编辑器、工具窗口...吗?
  • 它们进入代码和 xaml 编辑器的上下文菜单。

标签: visual-studio-2012 visual-studio-extensions vspackage


【解决方案1】:

我终于在 MSDN 上一篇名为 How to: Autoload a VSPackage 的文章中找到了我的问题的答案。 “技巧”是在为项目创建的包类上设置 ProvideAutoLoadAttribute。这是我正在从事的一个项目的声明:

[InstalledProductRegistration("#110", "#112", "1.0", IconResourceID = 400)]
[ProvideMenuResource("Menus.ctmenu", 1)]
[ProvideAutoLoad("{f1536ef8-92ec-443c-9ed7-fdadf150da82}")]
[Guid(GuidList.guidXamlHelpmeetPkgString)]
public sealed class XamlHelpmeetPackage : Package
{ ...

第三行是我添加的所有内容,以使原本可以工作的扩展尽早加载而不是按需加载。

【讨论】:

  • 是的,我知道我回到这个问题已经很晚了,但通常我们更喜欢避免 AutoLoad 包,因为“如果每个人都这样做”突然你的 VS 需要永远加载。由于您提到这是使用文本编辑器,通常最好的方法是在视图打开时触发,然后调用 IVsTextView.AddCommandFilter。如果这太麻烦了,一个更简单的方法可能是注册一个 ITextViewCreationListener,然后在创建 XAML 文件时加载你的包。
  • 谢谢杰森。回到这个项目后,我会考虑使用其中一种方法。
猜你喜欢
  • 2021-11-26
  • 1970-01-01
  • 1970-01-01
  • 2013-01-29
  • 1970-01-01
  • 1970-01-01
  • 2012-09-26
  • 1970-01-01
  • 2012-11-05
相关资源
最近更新 更多