如何:更改命令的外观
可以向用户提供反馈时通过更改命令的外观。 例如,那么,当它不可用时,您可能希望命令具有不同的外观。 可以使可用命令或不可用,隐藏或显示这些或检查或不指定其在菜单上。
若要更改命令的外观,请执行以下操作之一:
指定适当的标志在命令表文处理的命令定义。
使用 OleMenuCommandService 服务。
实现 IOleCommandTarget 接口并修改原始的命令对象。
使用托管包结构,下面的步骤演示如何查找和更新命令的外观 (MPF)。
更改菜单命令的外观
按照 如何:更改菜单命令的文本 的命令创建一个名为 新文本的菜单项。
在名为的 VSPackage 源文件,例如, MenuTextPackage.cs,将以下行添加到 MenuItemCallback 方法的末尾。
var command = sender as OleMenuCommand; if (command.Text == "New Text") EnableMyCommand(command.CommandID.ID, false);
获取要从 OleMenuCommandService 对象更新然后将命令对象的相应属性的命令。 例如,下面的方法由 VSPackage 命令设置的可用使指定的命令或不可用。
<PrincipalPermission(SecurityAction.Demand)> _ Public Function EnableMyCommand(ByVal cmdID As Integer, ByVal fEnableCmd As Boolean) As Boolean Dim fCmdUpdated As Boolean = False Dim mcs As OleMenuCommandService = TryCast(Me.GetService(GetType(IMenuCommandService)), OleMenuCommandService) Dim newCmdID As CommandID = New CommandID(GuidList.guidMenuTextCmdSet, cmdID) Dim mc As MenuCommand = mcs.FindCommand(newCmdID) If mc IsNot Nothing Then mc.Enabled = fEnableCmd fCmdUpdated = True End If Return fCmdUpdated End Function
[PrincipalPermission(SecurityAction.Demand)] public bool EnableMyCommand(int cmdID, bool fEnableCmd) { bool fCmdUpdated = false; var mcs = this.GetService(typeof(IMenuCommandService)) as OleMenuCommandService; var newCmdID = new CommandID(GuidList.guidMenuTextCmdSet, cmdID); MenuCommand mc = mcs.FindCommand(newCmdID); if (mc != null) { mc.Enabled = fEnableCmd; fCmdUpdated = true; } return fCmdUpdated; }
,则单击后,这样名为 新文本 的菜单项不可用。