コマンドライブラリクラス内のコマンドが要件に合わない場合は、独自のコマンドを作成できます。カスタムコマンドを作成するには、ICommand インターフェイスを実装します。WPF は、RoutedCommand(および RoutedUICommand)という名前の固有の実装を提供しています。このクラスは、要素ツリーを通じてルーティングされるコマンドを定義します。
以下の手順は、RoutedCommand を使用して C1Toolbar にカスタムコマンドを追加する方法を示します。
1部と同じサンプルを使用して、分離コードファイルを開きます。
ClearCommand という名前の RoutedCommand を定義します。このコマンドは、ページ内の TextBox からテキストをクリアするために使用されます。
C# |
コードのコピー
|
---|---|
public static RoutedCommand ClearCommand = new RoutedCommand(); |
コマンドロジックを定義するイベントハンドラを作成します。
C# |
コードのコピー
|
---|---|
// ClearCommand のロジックを実行します private void ExecutedClearCommand(object sender, ExecutedRoutedEventArgs e) { textBox1.Clear(); } |
コマンドを実行できるかどうかを決定するもう1つのイベントハンドラを作成します。コマンドを実行できない場合は、このコマンドに関連付けられているツールバーボタンが淡色表示され、無効になります。
C# |
コードのコピー
|
---|---|
// テキストボックスにテキストがある場合にのみ true を返します。 private void CanExecuteClearCommand(object sender, CanExecuteRoutedEventArgs e) { if (textBox1.Text.Length > 0) { e.CanExecute = true; } else { e.CanExecute = false; } } |
次に、このコマンドをイベントハンドラに関連付ける CommandBinding を作成します。このコマンドが呼び出されると、要素ツリー内で CommandBinding を含むオブジェクトが検索されます。ページの InitializeComponent 呼び出しの後に、次のコードを配置します。
C# |
コードのコピー
|
---|---|
CommandBinding customCommandBinding = new CommandBinding(ClearCommand, ExecutedClearCommand, CanExecuteClearCommand); // CommandBinding をルート要素にアタッチします this.CommandBindings.Add(customCommandBinding); |
C1Toolbar を含む XAML で、「アプリケーション」という名前のグループに新しい C1ToolbarButton を追加します。
ページの分離コード内で Command プロパティを静的コマンドに設定します。
XAML |
コードのコピー
|
---|---|
<c1:C1ToolbarGroup Header="アプリケーション"> <c1:C1ToolbarButton LabelTitle="テキストのクリア" Command="{x:Static local:MainWindow.ClearCommand}" LargeImageSource="/Resources/clear.png"/> </c1:C1ToolbarGroup> |
アプリケーションを実行します。ツールバーボタンをクリックすると、ClearCommand が要素ツリーを通じてルーティングされ、関連付けられた CommandBinding が検索されます。これが見つかると、関連付けられたイベントハンドラが呼び出され、コマンドロジックが実行されます。