Dieser Artikel wurde manuell übersetzt. Bewegen Sie den Mauszeiger über die Sätze im Artikel, um den Originaltext anzuzeigen. |
Übersetzung
Original
|
RoutedCommand.CanExecute-Methode
Ermittelt, ob dieser RoutedCommand im aktuellen Zustand ausgeführt werden kann.
Assembly: PresentationCore (in PresentationCore.dll)
Parameter
- parameter
- Typ: System.Object
Ein benutzerdefinierter Datentyp.
- target
- Typ: System.Windows.IInputElement
Das Ziel des Befehls.
Rückgabewert
Typ: System.Booleantrue, wenn der Befehl für das aktuelle Befehlsziel ausgeführt werden kann, andernfalls false.
| Ausnahme | Bedingung |
|---|---|
| InvalidOperationException |
target ist kein UIElement und kein ContentElement. |
Die eigentliche Logik, die ermittelt, ob ein RoutedCommand für das aktuelle Befehlsziel ausgeführt werden kann, ist nicht in den CanExecute-Methoden enthalten. Stattdessen löst CanExecute das PreviewCanExecute-Ereignis und das CanExecute-Ereignis aus, die die Elementstruktur abwärts oder aufwärts durchlaufen und ein Objekt mit einer CommandBinding suchen. Wenn ein CommandBinding für den RoutedCommand gefunden wird, dann wird der an CommandBinding angefügte CanExecuteRoutedEventHandler aufgerufen. Diese Handler stellen die Programmierlogik bereit, mit der ermittelt wird, ob der RoutedCommand ausgeführt werden kann.
Das PreviewCanExecute-Ereignis und PreviewExecuted-Ereignis werden für das CommandTarget ausgelöst. Wenn CommandTarget für die ICommandSource nicht festgelegt ist, werden das PreviewCanExecute-Ereignis und das CanExecute-Ereignis für das Element mit Tastaturfokus ausgelöst.
Im folgenden Beispiel wird ein CanExecuteChanged-Ereignishandler aus einer benutzerdefinierten Implementierung von ICommandSource dargestellt.
In diesem Beispiel stellt this.Command die Command-Eigenschaft für die ICommandSource dar. Wenn der Befehl nicht null ist, wird der Befehl in einen RoutedCommand umgewandelt. Wenn es sich um einen RoutedCommand-Befehl handelt, wird die CanExecute-Methode aufgerufen und CommandTarget und CommandParameter werden übergeben. Wenn es sich nicht um einen RoutedCommand-Befehl handelt, wird der Befehl in einen ICommand umgewandelt. Außerdem wird die CanExecute-Methode aufgerufen, und der CommandParameter wird übergeben.
Wenn die CanExecute-Methode true zurückgibt, ist das Steuerelement aktiviert.
private void CanExecuteChanged(object sender, EventArgs e) { if (this.Command != null) { RoutedCommand command = this.Command as RoutedCommand; // If a RoutedCommand. if (command != null) { if (command.CanExecute(CommandParameter, CommandTarget)) { this.IsEnabled = true; } else { this.IsEnabled = false; } } // If a not RoutedCommand. else { if (Command.CanExecute(CommandParameter)) { this.IsEnabled = true; } else { this.IsEnabled = false; } } } }
Windows 7, Windows Vista SP1 oder höher, Windows XP SP3, Windows Server 2008 (Server Core wird nicht unterstützt), Windows Server 2008 R2 (Server Core wird mit SP1 oder höher unterstützt), Windows Server 2003 SP2
.NET Framework unterstützt nicht alle Versionen sämtlicher Plattformen. Eine Liste der unterstützten Versionen finden Sie unter Systemanforderungen für .NET Framework.