RoutedCommand.CanExecute(Object, IInputElement) Methode
Definition
Wichtig
Einige Informationen beziehen sich auf Vorabversionen, die vor dem Release ggf. grundlegend überarbeitet werden. Microsoft übernimmt hinsichtlich der hier bereitgestellten Informationen keine Gewährleistungen, seien sie ausdrücklich oder konkludent.
Ermittelt, ob dieser RoutedCommand im aktuellen Zustand ausgeführt werden kann.
public:
bool CanExecute(System::Object ^ parameter, System::Windows::IInputElement ^ target);
[System.Security.SecurityCritical]
public bool CanExecute (object parameter, System.Windows.IInputElement target);
public bool CanExecute (object parameter, System.Windows.IInputElement target);
[<System.Security.SecurityCritical>]
member this.CanExecute : obj * System.Windows.IInputElement -> bool
member this.CanExecute : obj * System.Windows.IInputElement -> bool
Public Function CanExecute (parameter As Object, target As IInputElement) As Boolean
Parameter
- parameter
- Object
Ein benutzerdefinierter Datentyp.
- target
- IInputElement
Das Ziel des Befehls.
Gibt zurück
true
, wenn der Befehl für das aktuelle Befehlsziel ausgeführt werden kann, andernfalls false
.
- Attribute
Ausnahmen
target
ist kein UIElement und keine ContentElement.
Beispiele
Das folgende Beispiel ist ein CanExecuteChanged Ereignishandler aus einer benutzerdefinierten Implementierung von ICommandSource.
this.Command
in diesem Beispiel ist die Command -Eigenschaft für .ICommandSource Wenn der Befehl nicht null
ist, wird der Befehl in eine RoutedCommandumgewandelt. Wenn der Befehl ein RoutedCommandist, wird die CanExecute -Methode aufgerufen und übergeben.CommandTargetCommandParameter Wenn der Befehl kein RoutedCommandist, wird er in ein ICommand umgewandelt, und die CanExecute -Methode wird aufgerufen und übergeben.CommandParameter
Wenn die CanExecute -Methode zurückgibt true
, ist das Steuerelement aktiviert. Andernfalls wird das Steuerelement deaktiviert.
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;
}
}
}
}
Private Sub CanExecuteChanged(ByVal sender As Object, ByVal e As EventArgs)
If Me.Command IsNot Nothing Then
Dim command As RoutedCommand = TryCast(Me.Command, RoutedCommand)
' If a RoutedCommand.
If command IsNot Nothing Then
If command.CanExecute(CommandParameter, CommandTarget) Then
Me.IsEnabled = True
Else
Me.IsEnabled = False
End If
' If a not RoutedCommand.
Else
If Me.Command.CanExecute(CommandParameter) Then
Me.IsEnabled = True
Else
Me.IsEnabled = False
End If
End If
End If
End Sub
Hinweise
Die tatsächliche Logik, die bestimmt, ob ein RoutedCommand auf dem aktuellen Befehlsziel ausgeführt werden kann, ist nicht in den CanExecute Methoden enthalten, sondern CanExecute löst die PreviewCanExecute Ereignisse und aus CanExecute , die tunneln und durch die Elementstruktur auf der Suche nach einem Objekt mit einem CommandBinding. Wenn ein CommandBinding für RoutedCommand gefunden wird, wird die CanExecuteRoutedEventHandler angefügte aufgerufen CommandBinding . Diese Handler stellen die Programmierlogik bereit, um zu bestimmen, ob der RoutedCommand ausgeführt werden kann oder nicht.
Die PreviewCanExecute Ereignisse und PreviewExecuted werden für CommandTargetausgelöst. Wenn für CommandTarget nicht festgelegt ICommandSourceist, werden die PreviewCanExecute Ereignisse und CanExecute für das -Element mit Tastaturfokus ausgelöst.