Freigeben über


Gewusst wie: Aktivieren eines Befehls

Im folgenden Beispiel wird veranschaulicht, wie Befehle in Windows Presentation Foundation (WPF) verwendet werden. In dem Beispiel wird gezeigt, wie ein RoutedCommand einer Button zugeordnet wird, wie eine CommandBinding erstellt wird und wie Ereignishandler erstellt werden, mit denen RoutedCommand implementiert wird. Weitere Informationen über Befehle finden Sie unter Befehlsübersicht.

Beispiel

Mit dem ersten Codeabschnitt wird die user interface (UI) erstellt, die aus einer Button und einem StackPanel besteht. Dann wird eine CommandBinding erstellt, mit der die Befehlshandler dem RoutedCommand zugeordnet werden.

Die Command-Eigenschaft der Button ist dem Close-Befehl zugeordnet.

CommandBinding wird der CommandBindingCollection des Stamm-Window hinzugefügt. Die Ereignishandler Executed und CanExecute werden an diese Bindung angefügt und werden dem Close-Befehl zugeordnet.

Ohne CommandBinding gibt es keine Befehlslogik, sondern nur einen Mechanismus zum Aufrufen des Befehls. Wenn auf Button geklickt wird, wird PreviewExecuted RoutedEvent gefolgt von Executed RoutedEvent für das Befehlsziel ausgelöst. Diese Ereignisse durchlaufen die Elementstruktur auf der Suche nach einer CommandBinding für diesen speziellen Befehl. Da RoutedEvent die Elementstruktur abwärts und aufwärts durchläuft, sollte CommandBinding mit Bedacht gesetzt werden. Befindet sich CommandBinding auf einem dem Befehlsziel gleichgeordneten Element oder auf einem anderen Knoten, der nicht zur Route von RoutedEvent gehört, wird auf CommandBinding nicht zugegriffen.

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

Der nächste Codeabschnitt implementiert die Ereignishandler Executed und CanExecute.

Der Executed-Handler ruft eine Methode auf, um die geöffnete Datei zu schließen. Der CanExecute-Handler ruft eine Methode auf, um zu bestimmen, ob eine Datei geöffnet ist. Ist eine Datei geöffnet, wird CanExecute auf true festgelegt. Andernfalls wird er auf false festgelegt.

        ' 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;
    }
}

Siehe auch

Konzepte

Befehlsübersicht