Partager via


Comment : activer une commande

L'exemple suivant indique comment utiliser l'exécution de commandes dans Windows Presentation Foundation (WPF). L'exemple montre comment associer une RoutedCommand à un Button, créer une CommandBinding et créer les gestionnaires d'événements qui implémentent la RoutedCommand. Pour plus d'informations sur l'exécution des commandes, consultez Vue d'ensemble des commandes.

Exemple

La première section du code crée l'user interface (UI), qui se compose d'un Button et d'un StackPanel, et crée une CommandBinding qui associe les gestionnaires de commandes à la RoutedCommand.

La propriété Command du Button est associée à la commande Close.

La CommandBinding est ajoutée à la CommandBindingCollection de la Window racine. Les gestionnaires d'événements Executed et CanExecute sont attachés à cette liaison et associés à la commande Close.

Sans la CommandBinding, il n'y a aucune commande logique, uniquement un mécanisme pour appeler la commande. Lorsque l'utilisateur clique sur le Button, l'RoutedEvent PreviewExecuted est déclenché sur la cible de la commande suivie par l'RoutedEvent Executed. Ces événements parcourent l'arborescence d'éléments à la recherche d'une CommandBinding pour cette commande particulière. Il convient de noter que comme l'RoutedEvent effectue un tunneling et se propage à travers l'arborescence d'éléments, vous devez prêter une attention particulière à l'endroit où la CommandBinding est placée. Si la CommandBinding se trouve sur un frère de la cible de commande ou un autre nœud qui n'est pas sur l'itinéraire du RoutedEvent, la CommandBinding sera inaccessible.

<Window x:Class="WCSamples.Window1"
    xmlns="https://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="https://schemas.microsoft.com/winfx/2006/xaml"
    Title="CloseCommand"
    Name="RootWindow"
    >
  <Window.CommandBindings>
    <CommandBinding Command="ApplicationCommands.Close"
                    Executed="CloseCommandHandler"
                    CanExecute="CanExecuteHandler"
                    />
  </Window.CommandBindings>
  <StackPanel Name="MainStackPanel">
    <Button Command="ApplicationCommands.Close" 
            Content="Close File" />
  </StackPanel>
</Window>
            ' Create ui elements.
            Dim CloseCmdStackPanel As New StackPanel()
            Dim CloseCmdButton As New Button()
            CloseCmdStackPanel.Children.Add(CloseCmdButton)

            ' Set Button's properties.
            CloseCmdButton.Content = "Close File"
            CloseCmdButton.Command = ApplicationCommands.Close

            ' Create the CommandBinding.
            Dim CloseCommandBinding As New CommandBinding(ApplicationCommands.Close, AddressOf CloseCommandHandler, AddressOf CanExecuteHandler)

            ' Add the CommandBinding to the root Window.
            RootWindow.CommandBindings.Add(CloseCommandBinding)
// Create ui elements.
StackPanel CloseCmdStackPanel = new StackPanel();
Button CloseCmdButton = new Button();
CloseCmdStackPanel.Children.Add(CloseCmdButton);

// Set Button's properties.
CloseCmdButton.Content = "Close File";
CloseCmdButton.Command = ApplicationCommands.Close;

// Create the CommandBinding.
CommandBinding CloseCommandBinding = new CommandBinding(
    ApplicationCommands.Close, CloseCommandHandler, CanExecuteHandler);

// Add the CommandBinding to the root Window.
RootWindow.CommandBindings.Add(CloseCommandBinding);

La section suivante du code implémente les gestionnaires d'événements Executed et CanExecute.

Le gestionnaire Executed appelle une méthode pour fermer le fichier ouvert. Le gestionnaire CanExecute appelle une méthode pour déterminer si un fichier est ouvert. Si un fichier est ouvert, CanExecute a la valeur true ; sinon, il a la valeur false.

        ' Executed event handler.
        Private Sub CloseCommandHandler(ByVal sender As Object, ByVal e As ExecutedRoutedEventArgs)
            ' Calls a method to close the file and release resources.
            CloseFile()
        End Sub

        ' CanExecute event handler.
        Private Sub CanExecuteHandler(ByVal sender As Object, ByVal e As CanExecuteRoutedEventArgs)
            ' Call a method to determine if there is a file open.
            ' If there is a file open, then set CanExecute to true.
            If IsFileOpened() Then
                e.CanExecute = True
            ' if there is not a file open, then set CanExecute to false.
            Else
                e.CanExecute = False
            End If
        End Sub
// Executed event handler.
private void CloseCommandHandler(object sender, ExecutedRoutedEventArgs e)
{
    // Calls a method to close the file and release resources.
    CloseFile();
}

// CanExecute event handler.
private void CanExecuteHandler(object sender, CanExecuteRoutedEventArgs e)
{
    // Call a method to determine if there is a file open.
    // If there is a file open, then set CanExecute to true.
    if (IsFileOpened())
    {
        e.CanExecute = true;
    }
    // if there is not a file open, then set CanExecute to false.
    else
    {
        e.CanExecute = false;
    }
}

Voir aussi

Concepts

Vue d'ensemble des commandes