Freigeben über


RoutedCommand.CanExecute(Object, IInputElement) Methode

Definition

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

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.

Gilt für: