方法 : RoutedCommand を作成する

この例では、カスタム RoutedCommand を作成する方法、および ExecutedRoutedEventHandlerCanExecuteRoutedEventHandler を作成して CommandBinding に割り当てることによってカスタム コマンドを実装する方法について説明します。 コマンド実行の詳細については、「コマンド実行の概要」を参照してください。

使用例

RoutedCommand の作成の最初の手順は、コマンドを定義してインスタンス化することです。

        Public Shared CustomRoutedCommand As New RoutedCommand()
public static RoutedCommand CustomRoutedCommand = new RoutedCommand();

コマンドをアプリケーションで使用するには、コマンドの実行内容を定義するイベント ハンドラーを作成する必要があります。

        Private Sub ExecutedCustomCommand(ByVal sender As Object, ByVal e As ExecutedRoutedEventArgs)
            MessageBox.Show("Custom Command Executed")
        End Sub
private void ExecutedCustomCommand(object sender,
    ExecutedRoutedEventArgs e)
{
    MessageBox.Show("Custom Command Executed");
}
        ' CanExecuteRoutedEventHandler that only returns true if
        ' the source is a control.
        Private Sub CanExecuteCustomCommand(ByVal sender As Object, ByVal e As CanExecuteRoutedEventArgs)
            Dim target As Control = TryCast(e.Source, Control)

            If target IsNot Nothing Then
                e.CanExecute = True
            Else
                e.CanExecute = False
            End If
        End Sub
// CanExecuteRoutedEventHandler that only returns true if
// the source is a control.
private void CanExecuteCustomCommand(object sender, 
    CanExecuteRoutedEventArgs e)
{
    Control target = e.Source as Control;

    if(target != null)
    {
        e.CanExecute = true;
    }
    else
    {
        e.CanExecute = false;
    }
}

次に、コマンドをイベント ハンドラーに関連付ける CommandBinding が作成されます。 特定のオブジェクトで CommandBinding が作成されます。 このオブジェクトは、要素ツリー内の CommandBinding のスコープを定義します。

<Window x:Class="SDKSamples.Window1"
    xmlns="https://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="https://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:custom="clr-namespace:SDKSamples"
    Height="600" Width="800"
    >
  <Window.CommandBindings>
    <CommandBinding Command="{x:Static custom:Window1.CustomRoutedCommand}"
                    Executed="ExecutedCustomCommand"
                    CanExecute="CanExecuteCustomCommand" />
  </Window.CommandBindings>
            Dim customCommandBinding As New CommandBinding(CustomRoutedCommand, AddressOf ExecutedCustomCommand, AddressOf CanExecuteCustomCommand)

            ' attach CommandBinding to root window
            Me.CommandBindings.Add(customCommandBinding)
CommandBinding customCommandBinding = new CommandBinding(
    CustomRoutedCommand, ExecutedCustomCommand, CanExecuteCustomCommand);

// attach CommandBinding to root window
this.CommandBindings.Add(customCommandBinding);

最後の手順では、コマンドを呼び出します。 コマンドを呼び出す方法の 1 つとして、Button などの ICommandSource にコマンドを関連付ける方法があります。

<StackPanel>
  <Button Command="{x:Static custom:Window1.CustomRoutedCommand}"
          Content="CustomRoutedCommand"/>
</StackPanel>
            ' create the ui
            Dim CustomCommandStackPanel As New StackPanel()
            Dim CustomCommandButton As New Button()
            CustomCommandStackPanel.Children.Add(CustomCommandButton)

            CustomCommandButton.Command = CustomRoutedCommand
// create the ui
StackPanel CustomCommandStackPanel = new StackPanel();
Button CustomCommandButton = new Button();
CustomCommandStackPanel.Children.Add(CustomCommandButton);

CustomCommandButton.Command = CustomRoutedCommand;

ボタンがクリックされると、カスタム RoutedCommandExecute メソッドが呼び出されます。 RoutedCommand は、PreviewExecuted および Executed の各ルーティング イベントを発生させます。 これらのイベントは、この特定のコマンドの CommandBinding を要素ツリー内で検索します。 CommandBinding が見つかった場合は、CommandBinding に関連付けられた ExecutedRoutedEventHandler が呼び出されます。

参照

参照

RoutedCommand

概念

コマンド実行の概要