VS2022扩展命令初始检查状态
VS2022 extensions command initial checked state
我有一个基于默认模板的 VS 扩展命令。它有 CommandFlag 的 TextChanges
和 TogglePatternAvailable
。根据配置设置,应检查其初始状态,但是,这似乎不可能。
这是我希望在第一次加载时看到的内容:
创建菜单项后,我尝试在命令的构造函数中将 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 { ... }
我有一个基于默认模板的 VS 扩展命令。它有 CommandFlag 的 TextChanges
和 TogglePatternAvailable
。根据配置设置,应检查其初始状态,但是,这似乎不可能。
这是我希望在第一次加载时看到的内容:
创建菜单项后,我尝试在命令的构造函数中将 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 { ... }