更改命令的外观

可以通过更改命令的外观向用户提供反馈。 例如,你可能希望命令在不可用时看起来不同。 你可以使命令可用或不可用、隐藏或显示它们,或在菜单上检查或取消检查命令。

若要更改命令的外观,请执行以下步骤之一:

  • 在命令表文件中的命令定义中指定相应的标志。

  • 使用服务 OleMenuCommandService

  • IOleCommandTarget实现接口并修改原始命令对象。

    以下步骤演示如何使用托管包框架(MPF)查找和更新命令的外观。

更改菜单命令的外观

  1. 按照“更改菜单命令的文本”中的说明创建一个名为New Text“的菜单项。

  2. ChangeMenuText.cs 文件中,添加以下 using 语句:

    using System.Security.Permissions;
    
  3. ChangeMenuTextPackageGuids.cs 文件中,添加以下行:

    public const string guidChangeMenuTextPackageCmdSet= "00000000-0000-0000-0000-00000000";  // get the GUID from the .vsct file
    
  4. 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);
    }
    
  5. 从对象获取要更新的 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;
    }
    
  6. 生成项目并启动调试。 应显示 Visual Studio 的实验实例。

  7. “工具” 菜单上,单击“ 调用 ChangeMenuText ”命令。 此时,命令名称为 Invoke ChangeMenuText,因此命令处理程序不会调用 ChangeMyCommand()。

  8. “工具” 菜单上,现在应会看到 “新建文本”。 单击“ 新建文本”。 命令现在应灰显。