方法 : MenuItem にコマンドを追加する
MenuItem を Paste コマンドのコマンド ソースとして設定する方法を次の例に示します。 コマンド実行の詳細については、「コマンド実行の概要」を参照してください。
使用例
Button や Hyperlink などの MenuItem は、ICommandSource を実装します。 ICommandSource は、Command と CommandTarget の 2 つのプロパティを公開します。 Command は、呼び出されるコマンドです。CommandTarget は、コマンドが呼び出されたときにイベントのルーティングが開始される要素です。 CommandTarget が定義されていない場合は、キーボード フォーカスが設定されている要素が対象として設定されます。
ICommandSource を実装するクラスは、コマンドを呼び出すことの意味を定義します。 MenuItem および Button は、コマンドを呼び出すための手段として Click イベントを定義します。 特定の CommandTarget でコマンドを実行できない場合、MenuItem は無効になります。 CommandTarget でコマンドを実行できる場合、MenuItem は有効になります。
この例では、アプリケーションのメイン Window で MenuItem が作成されています。 Command プロパティは Paste コマンドに設定されています。 CommandTarget は MenuItem で定義されていません。したがって、コマンドの対象は、キーボード フォーカスを持つ要素になります。
TextBox クラスが Paste コマンドのロジックを提供するため、CommandBinding は不要です。 コマンドを処理するコントロールがコマンドの実行のためのロジックを提供しない場合は、ExecutedRoutedEventHandler および CanExecuteRoutedEventHandler を RoutedCommand にバインドするために、CommandBinding が必要です。
<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>