Freigeben über


Anleitung zum Erstellen eines RoutedCommand

In diesem Beispiel wird gezeigt, wie Sie einen benutzerdefinierten Befehl RoutedCommand erstellen und wie Sie den benutzerdefinierten Befehl implementieren, indem Sie eine ExecutedRoutedEventHandler und eine CanExecuteRoutedEventHandler an eine CommandBinding anfügen. Weitere Informationen zum Befehlen finden Sie in der Befehlsübersicht.

Beispiel

Der erste Schritt beim Erstellen einer Datei RoutedCommand besteht darin, den Befehl zu definieren und zu instanziieren.

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

Um den Befehl in einer Anwendung zu verwenden, müssen Ereignishandler, die definieren, was der Befehl tut, erstellt werden müssen.

private void ExecutedCustomCommand(object sender,
    ExecutedRoutedEventArgs e)
{
    MessageBox.Show("Custom Command Executed");
}
Private Sub ExecutedCustomCommand(ByVal sender As Object, ByVal e As ExecutedRoutedEventArgs)
    MessageBox.Show("Custom Command Executed")
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;
    }
}
' 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

Als Nächstes wird ein CommandBinding Befehl erstellt, der den Befehl den Ereignishandlern zuordnet. Dies CommandBinding wird für ein bestimmtes Objekt erstellt. Dieses Objekt definiert den Bereich der CommandBinding Elementstruktur.

<Window x:Class="SDKSamples.Window1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://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>
CommandBinding customCommandBinding = new CommandBinding(
    CustomRoutedCommand, ExecutedCustomCommand, CanExecuteCustomCommand);

// attach CommandBinding to root window
this.CommandBindings.Add(customCommandBinding);
Dim customCommandBinding As New CommandBinding(CustomRoutedCommand, AddressOf ExecutedCustomCommand, AddressOf CanExecuteCustomCommand)

' attach CommandBinding to root window
Me.CommandBindings.Add(customCommandBinding)

Der letzte Schritt ist das Aufrufen des Befehls. Eine Möglichkeit zum Aufrufen eines Befehls ist das Zuordnen eines Befehls zu einem ICommandSource, z. B. einem Button.

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

CustomCommandButton.Command = CustomRoutedCommand;
' create the ui
Dim CustomCommandStackPanel As New StackPanel()
Dim CustomCommandButton As New Button()
CustomCommandStackPanel.Children.Add(CustomCommandButton)

CustomCommandButton.Command = CustomRoutedCommand

Wenn auf die Schaltfläche geklickt wird, wird die Methode Execute des benutzerdefinierten RoutedCommand aufgerufen. Die Ereignisse RoutedCommand und PreviewExecuted werden ausgelöst und Executed weitergeleitet. Diese Ereignisse durchlaufen die Elementstruktur und suchen nach einem CommandBinding für diesen besonderen Befehl. Falls ein CommandBinding gefunden wird, wird der mit ExecutedRoutedEventHandler verbundene CommandBinding aufgerufen.

Siehe auch