Freigeben über


RoutedCommand.CanExecute(Object, IInputElement) Methode

Definition

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

Beispiele

Das folgende Beispiel ist ein CanExecuteChanged Ereignishandler aus einer benutzerdefinierten Implementierung von ICommandSource.

this.Commandin diesem Beispiel ist die Command -Eigenschaft für .ICommandSource Wenn der Befehl nicht nullist, 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.

Gilt für: