Toolbar for WPF/Silverlight
2部:カスタムコマンドの作成
コマンドチュートリアル (WPF のみ) > 2部:カスタムコマンドの作成

コマンドライブラリクラス内のコマンドが要件に合わない場合は、独自のコマンドを作成できます。カスタムコマンドを作成するには、ICommand インターフェイスを実装します。WPF は、RoutedCommand(および RoutedUICommand)という名前の固有の実装を提供しています。このクラスは、要素ツリーを通じてルーティングされるコマンドを定義します。

以下の手順は、RoutedCommand を使用して C1Toolbar にカスタムコマンドを追加する方法を示します。

  1. 1部と同じサンプルを使用して、分離コードファイルを開きます。

  2. ClearCommand という名前の RoutedCommand を定義します。このコマンドは、ページ内の TextBox からテキストをクリアするために使用されます。

    C#
    コードのコピー
    public static RoutedCommand ClearCommand = new RoutedCommand();
    
  3. コマンドロジックを定義するイベントハンドラを作成します。

    C#
    コードのコピー
    // ClearCommand のロジックを実行します
    private void ExecutedClearCommand(object sender, ExecutedRoutedEventArgs e)
    {
        textBox1.Clear();
    }
    
  4. コマンドを実行できるかどうかを決定するもう1つのイベントハンドラを作成します。コマンドを実行できない場合は、このコマンドに関連付けられているツールバーボタンが淡色表示され、無効になります。

    C#
    コードのコピー
    // テキストボックスにテキストがある場合にのみ true を返します。
    private void CanExecuteClearCommand(object sender, CanExecuteRoutedEventArgs e)
    {
        if (textBox1.Text.Length > 0)
        {
            e.CanExecute = true;
        }
        else
        {
            e.CanExecute = false;
        }
    }
    
  5. 次に、このコマンドをイベントハンドラに関連付ける CommandBinding を作成します。このコマンドが呼び出されると、要素ツリー内で CommandBinding を含むオブジェクトが検索されます。ページの InitializeComponent 呼び出しの後に、次のコードを配置します。

    C#
    コードのコピー
    CommandBinding customCommandBinding = new CommandBinding(ClearCommand, 
    
    ExecutedClearCommand, CanExecuteClearCommand); 
    // CommandBinding をルート要素にアタッチします
    this.CommandBindings.Add(customCommandBinding);
    
  6. C1Toolbar を含む XAML で、「アプリケーション」という名前のグループに新しい C1ToolbarButton を追加します。

  7. ページの分離コード内で Command プロパティを静的コマンドに設定します。

    XAML
    コードのコピー
    <c1:C1ToolbarGroup Header="アプリケーション">
        <c1:C1ToolbarButton LabelTitle="テキストのクリア" 
    
        Command="{x:Static local:MainWindow.ClearCommand}" 
    
        LargeImageSource="/Resources/clear.png"/>
    </c1:C1ToolbarGroup>
    
  8. アプリケーションを実行します。ツールバーボタンをクリックすると、ClearCommand が要素ツリーを通じてルーティングされ、関連付けられた CommandBinding が検索されます。これが見つかると、関連付けられたイベントハンドラが呼び出され、コマンドロジックが実行されます。