如何:向 MenuItem 中添加命令
更新:2007 年 11 月
下面的示例演示如何将 MenuItem 设置为 Paste 命令的命令源。 有关设置命令的更多信息,请参见命令概述。
示例
MenuItem(如 Button 和 Hyperlink)实现 ICommandSource。 ICommandSource 公开的两个属性是 Command 和 CommandTarget。Command 是将调用的命令,CommandTarget 是在调用该命令后作为事件传送起点的元素。 如果未定义 CommandTarget,则具有键盘焦点的元素将设置为目标。
实现 ICommandSource 的类定义在什么情况下调用命令。MenuItem 和 Button 定义用作命令调用方式 Click 事件。 如果该命令在特定的 CommandTarget 上无法执行,将禁用 MenuItem。 如果该命令可以在 CommandTarget 上执行,将启用 MenuItem。
在本示例中,在应用程序的主 Window 上创建一个 MenuItem。Command 属性设置为 Paste 命令。CommandTarget 未在 MenuItem 上定义;因此,命令的目标将是具有键盘焦点的元素。
因为 TextBox 类为 Paste 命令提供了逻辑,所以 CommandBinding 不是必需的。 如果处理命令的控件没有为命令的执行提供逻辑,则需要 CommandBinding 来将 ExecutedRoutedEventHandler 和 CanExecuteRoutedEventHandler 绑定到 RoutedCommand。
<Window x:Class="SDKSamples.Window1"
xmlns="https://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="https://schemas.microsoft.com/winfx/2006/xaml"
Title="MenuItemCommandTask"
>
<DockPanel>
<Menu DockPanel.Dock="Top">
<MenuItem Command="ApplicationCommands.Paste" Width="75" />
</Menu>
<TextBox BorderBrush="Black" BorderThickness="2" Margin="25"
TextWrapping="Wrap">
The MenuItem will not be enabled until
this TextBox gets keyboard focus
</TextBox>
</DockPanel>
</Window>