Aktualisiert: November 2007
Ermittelt, ob dieser RoutedCommand im aktuellen Zustand ausgeführt werden kann.
Namespace:
System.Windows.Input
Assembly:
PresentationCore (in PresentationCore.dll)
Visual Basic (Deklaration)
Public Function CanExecute ( _
parameter As Object, _
target As IInputElement _
) As Boolean
Visual Basic (Verwendung)
Dim instance As RoutedCommand
Dim parameter As Object
Dim target As IInputElement
Dim returnValue As Boolean
returnValue = instance.CanExecute(parameter, _
target)
public bool CanExecute(
Object parameter,
IInputElement target
)
public:
bool CanExecute(
Object^ parameter,
IInputElement^ target
)
public boolean CanExecute(
Object parameter,
IInputElement target
)
public function CanExecute(
parameter : Object,
target : IInputElement
) : boolean
Sie können diese Methoden nicht in XAML verwenden.
Rückgabewert
Typ:
System..::.Booleantrue, wenn der Befehl für das aktuelle Befehlsziel ausgeführt werden kann, andernfalls false.
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. Im vollständigen Beispiel wird die Slider-Klasse in Unterklassen unterteilt und ICommandSource wird implementiert, um einen Schieberegler zu erstellen, der einen Befehl aufruft, wenn die Werteigenschaft geändert wird. Das vollständige Beispiel finden Sie unter Beispiel für das Implementieren von "ICommandSource".
In diesem Beispiel stellt this.Command die Command-Eigenschaft für die ICommandSource dar. Wenn der Befehl nicht nullNothingnullptrNULL-Verweis (Nothing in Visual Basic) 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 Vista
.NET Framework und .NET Compact Framework unterstützen nicht alle Versionen sämtlicher Plattformen. Eine Liste der unterstützten Versionen finden Sie unter Systemanforderungen für .NET Framework.
.NET Framework
Unterstützt in: 3.5, 3.0
Referenz
Weitere Ressourcen