VS2022扩展命令初始检查状态

VS2022 extensions command initial checked state

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

这是我希望在第一次加载时看到的内容:

创建菜单项后,我尝试在命令的构造函数中将 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?

最后我设法通过将 ProvideAutoLoad 属性添加到我的包中来让它工作。目前尚不清楚这是否是执行此操作的正确方法。包 class 现在看起来像这样:

[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 { ... }