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.
Bestimmt, ob dies 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 Befehlsziel.
Gibt zurück
truewenn der Befehl für das aktuelle Befehlsziel ausgeführt werden kann; andernfalls . false
- Attribute
Ausnahmen
target ist kein UIElement oder 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 die ICommandSource. Wenn der Befehl nicht nullist, wird der Befehl in ein RoutedCommand. Wenn der Befehl ein RoutedCommandist, wird die CanExecute Methode aufgerufen, die und CommandTarget die .CommandParameter Wenn es sich nicht um einen RoutedCommandBefehl handelt, wird er in eine ICommand Umwandlung umgezogen, und die CanExecute Methode wird aufgerufen, um die CommandParameter.
Wenn die CanExecute Methode zurückgegeben wird 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 Objekt auf dem aktuellen Befehlsziel ausgeführt werden kann, ist nicht in den CanExecute Methoden enthalten, sondern löst die PreviewCanExecute Ereignisse aus, CanExecute die CanExecute durch die Elementstruktur tunneln und durchblasen, die nach einem Objekt mit einem CommandBindingObjekt suchen. Wenn eins CommandBinding gefunden RoutedCommand wird, wird der CanExecuteRoutedEventHandler angefügte CommandBinding Wert aufgerufen. Diese Handler liefern die Programmierlogik, um festzustellen, ob die RoutedCommand Ausführung möglich ist.
Die PreviewCanExecute Ereignisse und PreviewExecuted Ereignisse werden auf der CommandTarget. Wenn die Einstellung für das CommandTargetICommandSourceElement nicht festgelegt ist, werden die PreviewCanExecute Ereignisse und CanExecute Ereignisse auf dem Element mit Tastaturfokus ausgelöst.