Freigeben über


Vorgehensweise: Aktivieren eines Befehls

Im folgenden Beispiel wird die Verwendung von Befehlen in Windows Presentation Foundation (WPF) veranschaulicht. Das Beispiel zeigt, wie Sie einem RoutedCommandButtonEreignishandler zuordnen, einen CommandBindingerstellen und erstellen, die die RoutedCommand. Weitere Informationen zum Befehlen finden Sie in der Befehlsübersicht.

Beispiel

Der erste Codeteil erstellt die Benutzeroberfläche (UI), die aus einem Button und einem StackPanel besteht, und erstellt ein CommandBinding, das die Befehlshandler mit den RoutedCommand verbindet.

Die Command Eigenschaft des Befehls Button ist dem Close Befehl zugeordnet.

Der CommandBinding wird dem CommandBindingCollection des Stamm-Window hinzugefügt. Die Executed- und CanExecute-Ereignishandler sind an diese Verknüpfung angehängt und mit dem Close-Befehl verknüpft.

Ohne die CommandBinding Befehlslogik gibt es nur einen Mechanismus zum Aufrufen des Befehls. Wenn Button geklickt wird, wird PreviewExecutedRoutedEvent auf dem Befehlsziel ausgelöst, gefolgt von ExecutedRoutedEvent. Diese Ereignisse durchlaufen die Elementstruktur und suchen nach einem CommandBinding für diesen bestimmten Befehl. Es lohnt sich, darauf hinzuweisen, dass tunneln RoutedEvent und durch die Elementstruktur blähen müssen, in der Stelle, an der die CommandBinding Stelle platziert wird, beachtet werden. Wenn sich CommandBinding auf einem gleichgeordneten Element des Befehlsziels oder einem anderen Knoten befindet, der sich nicht auf der Route von RoutedEvent befindet, wird nicht auf CommandBinding zugegriffen.

<Window x:Class="WCSamples.Window1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://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.
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);
' 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)

Im nächsten Codeabschnitt werden die Ereignishandler Executed und CanExecute implementiert.

Der Executed Handler ruft eine Methode zum Schließen der geöffneten Datei auf. Der CanExecute Handler ruft eine Methode auf, um zu bestimmen, ob eine Datei geöffnet ist. Wenn eine Datei geöffnet ist, wird CanExecute auf true gesetzt; andernfalls auf false.

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

Siehe auch