0

我正在为 VS 2019 开发 Visual Studio 扩展。我添加了一个菜单按钮,当我右键单击它时,它会出现在解决方案资源管理器中某个项目的上下文菜单中。

我想使用自定义 UI 上下文来切换它的可见性,推荐的方法是使用此处描述<VisibilityConstraint>的标签来实现.vsct

所以现在我的按钮在我激活 UI 上下文时可见,而当我以编程方式使上下文不活动时不可见。但是,我希望我的按钮执行命令,所以我添加了一个初始化 OleMenuCommand 的命令类,并绑定到我添加到.vsct文件中的按钮的命令 ID

    private OpenFileCommand(AsyncPackage package, OleMenuCommandService commandService)
    {
        var menuCommandID = new CommandID(MyGUIDs.guidPackageCmdSet, MyGUIDs.CommandIdOfCommandSet);
        var menuCommand = new OleMenuCommand(this.Execute, menuCommandID);
        commandService.AddCommand(menuCommand);
    }

我在我的 AsyncPackage 中初始化这个命令,就像下面的代码:

    public static async Task InitializeAsync(AsyncPackage package)
    {
        await ThreadHelper.JoinableTaskFactory.SwitchToMainThreadAsync(package.DisposalToken);

        OleMenuCommandService commandService = await package.GetServiceAsync(typeof(IMenuCommandService)) as OleMenuCommandService;
        Instance = new OpenPhysicalFileDiffCommand(package, commandService);
    }

由于这个命令,附加到我的按钮,现在我的按钮总是可见的。如果我删除命令的初始化,我的 UI 上下文使我处于非活动状态,并且按钮在需要时被隐藏。

如何让可见性由自定义 UI 上下文(我定义的 guid 并使用IMoniterSelection服务切换)控制?以及如何在单击按钮后仍向按钮添加命令以执行某些操作?

我的.vsct文件看起来像这样

<VisibilityConstraints> <VisibilityItem guid="guidPackageCmdSet" id="CommandIdOfCommandSet" context="UICONTEXT_Switch" /> </VisibilityConstraints>

4

0 回答 0