Partager via


Comment : créer un RoutedCommand

Cet exemple montre comment créer une commande personnalisée et comment implémenter la commande personnalisée RoutedCommand en créant un et un ExecutedRoutedEventHandlerCanExecuteRoutedEventHandler et en les attachant à un CommandBinding. Pour plus d’informations sur la commande, consultez la vue d’ensemble de la commande.

Exemple

La première étape de création d’une RoutedCommand commande consiste à définir la commande et à l’instancier.

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

Pour utiliser la commande dans une application, les gestionnaires d’événements qui définissent ce que doit faire la commande doivent être créés

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

Ensuite, un CommandBinding élément est créé qui associe la commande aux gestionnaires d’événements. Le CommandBinding fichier est créé sur un objet spécifique. Cet objet définit l’étendue de l’arborescence CommandBinding d’éléments

<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)

La dernière étape consiste à appeler la commande. Une façon d’appeler une commande consiste à l’associer à un ICommandSource, tel qu’un 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

Lorsque le bouton est cliqué, la Execute méthode sur l’objet personnalisé RoutedCommand est appelée. Déclenche RoutedCommand les PreviewExecuted événements routés et Executed routés. Ces événements parcourent l’arborescence d’éléments à la recherche d’une CommandBinding commande particulière. Si une CommandBinding valeur est trouvée, l’associé ExecutedRoutedEventHandlerCommandBinding est appelé.

Voir aussi