0

我有一个基于默认模板的 VS 扩展命令。它具有 CommandFlagTextChangesTogglePatternAvailable. 根据配置设置,应检查其初始状态,但是,这似乎是不可能的。

这是我想在第一次加载时看到的:

复选框

创建菜单项后,我尝试在命令的构造函数中设置Checked为:true

menuItem1 = new OleMenuCommand(ExecuteCommand1, _, BeforeQueryStatus, new CommandID(CommandSet, Command1Id));
menuItem1.Checked = true; // This does not work

我也尝试使用BeforeQueryStatus来更改初始选中状态,但在打开“工具”菜单时似乎没有调用它。这可能是一个错误???:

private void BeforeQueryStatus(object sender, EventArgs e)
{
    ThreadHelper.JoinableTaskFactory.Run(async delegate
    {
        await ThreadHelper.JoinableTaskFactory.SwitchToMainThreadAsync(package.DisposalToken);
        menuItem1.Checked = true;
    });
}

单击菜单项会触发一次,BeforeQueryStatus然后检查状态,证明代码确实有效。

如何根据配置设置将菜单项的初始选中状态设置为 true,所以在代码中?

4

1 回答 1

0

最后,我设法通过将ProvideAutoLoad属性添加到我的包中使其工作。目前尚不清楚这是否是正确的方法。pacakge 类现在看起来像这样:

[PackageRegistration(UseManagedResourcesOnly = true, AllowsBackgroundLoading = true)]
[Guid(PackageGuidString)]
[ProvideMenuResource("Menus.ctmenu", 1)]
[ProvideAutoLoad(VSConstants.UICONTEXT.NoSolution_string, PackageAutoLoadFlags.BackgroundLoad)]
[ProvideAutoLoad(VSConstants.UICONTEXT.SolutionExists_string, PackageAutoLoadFlags.BackgroundLoad)]
public sealed class MyPackage : AsyncPackage { ... }
于 2022-02-21T09:24:24.053 回答