Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Visual studio 2012 Visual Studio 2012扩展中的状态驱动菜单项_Visual Studio 2012_Visual Studio Extensions_Vspackage - Fatal编程技术网

Visual studio 2012 Visual Studio 2012扩展中的状态驱动菜单项

Visual studio 2012 Visual Studio 2012扩展中的状态驱动菜单项,visual-studio-2012,visual-studio-extensions,vspackage,Visual Studio 2012,Visual Studio Extensions,Vspackage,我正在编写一个VisualStudio2012扩展,它定义了几个子菜单,可以放在两个现有的VisualStudio上下文菜单中。子菜单项似乎工作正常,但有一点除外: 在单击“我的包”中的第一个菜单项之前,每个菜单项的状态都是其默认状态,具体取决于其在VSCT文件中的定义。这对于始终处于启用状态的菜单项很好,但某些菜单项应根据某些变化的条件启用或禁用。在包定位之后,它们的状态设置正确,但是在单击第一项之前,如何才能正确设置状态 我的解决方案中没有可用的默认状态。第一次出现“我的菜单”时,条件可能为

我正在编写一个VisualStudio2012扩展,它定义了几个子菜单,可以放在两个现有的VisualStudio上下文菜单中。子菜单项似乎工作正常,但有一点除外:

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

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


如果您对此有一个解决方案,或者知道在某个地方的教程中解决了这个问题,我将非常感谢您的帮助。

我终于在MSDN上的一篇名为的文章中找到了我的问题的答案。“技巧”是在为项目创建的包类上设置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
{ ...

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

这些菜单项适用于什么上下文?它们是用于文本编辑器、工具窗口…?它们进入代码和xaml编辑器的上下文菜单。是的,我知道我回到这一点已经晚了,但通常我们更喜欢避免自动加载软件包,因为“如果每个人都这样做”会突然让你的VS永远无法加载。因为您已经提到这是使用文本编辑器实现的,所以通常最好的方法是在打开视图时触发,然后调用IVsTextView.AddCommandFilter。如果这太麻烦了,一个更简单的方法可能是注册一个ITextViewCreationListener,然后在创建XAML文件时加载您的包。谢谢Jason。一旦我回到这个项目,我将考虑使用这些方法中的一种。