更改命令的外观
可以通过更改命令的外观向用户提供反馈。 例如,你可能希望命令在不可用时看起来不同。 你可以使命令可用或不可用、隐藏或显示它们,或在菜单上检查或取消检查命令。
若要更改命令的外观,请执行以下步骤之一:
在命令表文件中的命令定义中指定相应的标志。
使用服务 OleMenuCommandService 。
IOleCommandTarget实现接口并修改原始命令对象。
以下步骤演示如何使用托管包框架(MPF)查找和更新命令的外观。
更改菜单命令的外观
按照“更改菜单命令的文本”中的说明创建一个名为
New Text
“的菜单项。在 ChangeMenuText.cs 文件中,添加以下 using 语句:
using System.Security.Permissions;
在 ChangeMenuTextPackageGuids.cs 文件中,添加以下行:
public const string guidChangeMenuTextPackageCmdSet= "00000000-0000-0000-0000-00000000"; // get the GUID from the .vsct file
在 ChangeMenuText.cs 文件中,将 ShowMessageBox 方法中的代码替换为以下内容:
private void Execute(object sender, EventArgs e) { ThreadHelper.ThrowIfNotOnUIThread(); var command = sender as OleMenuCommand; if (command.Text == "New Text") ChangeMyCommand(command.CommandID.ID, false); }
从对象获取要更新的 OleMenuCommandService 命令,然后设置命令对象的相应属性。 例如,以下方法使 VSPackage 命令集中的指定命令可用或不可用。 以下代码使命名
New Text
的菜单项在单击后不可用。public bool ChangeMyCommand(int cmdID, bool enableCmd) { bool cmdUpdated = false; var mcs = this.package.GetService<IMenuCommandService, OleMenuCommandService>(); var newCmdID = new CommandID(new Guid(ChangeMenuTextPackageGuids.guidChangeMenuTextPackageCmdSet), cmdID); MenuCommand mc = mcs.FindCommand(newCmdID); if (mc != null) { mc.Enabled = enableCmd; cmdUpdated = true; } return cmdUpdated; }
生成项目并启动调试。 应显示 Visual Studio 的实验实例。
在 “工具” 菜单上,单击“ 调用 ChangeMenuText ”命令。 此时,命令名称为 Invoke ChangeMenuText,因此命令处理程序不会调用 ChangeMyCommand()。
在 “工具” 菜单上,现在应会看到 “新建文本”。 单击“ 新建文本”。 命令现在应灰显。