以下の例は、Windows Presentation Foundation (WPF)で、コマンドをどのように使用するかをデモンストレーションします。例は、RoutedCommandを実装する、CommandBindingを作成し、イベント・ハンドラを作成するButtonにRoutedCommandを、どのように、関連付けるかを示します。コマンディングの詳細については、「コマンドの概要」を参照してください。
例
Example
コードの最初のセクションは、ButtonとStackPanelから構成されている、ユーザー・インターフェイス(UI)を作成します。そして、コマンド・ハンドラをRoutedCommandと関連付けるCommandBindingを作成します。
ButtonのCommandプロパティは、Closeコマンドに関連付けられています。
CommandBindingは、ルートWindowのCommandBindingCollectionに追加されます。ExecutedとCanExecuteイベント・ハンドラは、結合に添付され、Closeコマンドと関連付けられます。
CommandBindingがなければ、コマンドを呼び出すメカニズムのみで、コマンド・ロジックがありません。Buttonが、クリックされるとき、PreviewExecuted RoutedEventが、コマンド・ターゲットで発生し、続いて、Executed RoutedEventが、発生します。これらのイベントは、その特定のコマンドのCommandBindingを探して要素ツリーを走査します。RoutedEventは、要素ツリーをトンネル、バブルするため、CommandBindingを配置する場所に、注意する必要があります。CommandBindingが、RoutedEventのルート上ではなく、コマンド・ターゲットや他のノードの兄弟の上にある場合、CommandBindingは、アクセスされません。
<Window x:Class="WCSamples.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="CloseCommand"
Name="RootWindow"
>
<Window.CommandBindings>
<CommandBinding Command="ApplicationCommands.Close"
Executed="CloseCommandHandler"
CanExecute="CanExecuteHandler"
/>
</Window.CommandBindings>
<StackPanel Name="MainStackPanel">
<Button Command="ApplicationCommands.Close"
Content="Close File" />
</StackPanel>
</Window>
// ui要素を作成します。
StackPanel CloseCmdStackPanel = new StackPanel();
Button CloseCmdButton = new Button();
CloseCmdStackPanel.Children.Add(CloseCmdButton);
// Buttonのプロパティを設定します。
CloseCmdButton.Content = "Close File";
CloseCmdButton.Command = ApplicationCommands.Close;
// CommandBindingを作成します。
CommandBinding CloseCommandBinding = new CommandBinding(
ApplicationCommands.Close, CloseCommandHandler, CanExecuteHandler);
// CommandBindingをルートWindowに追加します。
RootWindow.CommandBindings.Add(CloseCommandBinding);
コードの次のセクションは、ExecutedとCanExecuteイベント・ハンドラを実装します。
Executedハンドラは、開いたファイルを閉じるために、メソッドを呼び出します。CanExecuteハンドラは、ファイルが開いているか判断するために、メソッドを呼び出します。ファイルが、開いている場合、CanExecuteが、trueに設定されています。;それ以外の場合には、falseに設定されています。
// Executedイベント・ハンドラ。
private void CloseCommandHandler(object sender, ExecutedRoutedEventArgs e)
{
// ファイルを閉じて、リソースを解放するために、メソッドを呼び出します。
CloseFile();
}
// CanExecuteイベント・ハンドラ。
private void CanExecuteHandler(object sender, CanExecuteRoutedEventArgs e)
{
// ファイルが開いているか、判断するために、メソッドを呼び出します。
// ファイルが、開かれている場合、続いて、CanExecuteを、trueに設定します。
if (IsFileOpened())
{
e.CanExecute = true;
}
// ファイルが、開かれていない場合、続いて、CanExecuteを、falseに設定します。
else
{
e.CanExecute = false;
}
}
こちらもご覧ください
See also
- 「コマンドの概要」