Condividi tramite


RoutedCommand.CanExecute(Object, IInputElement) Metodo

Definizione

Determina se questo oggetto RoutedCommand può essere eseguito nello stato corrente.

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

Parametri

parameter
Object

Tipo di dati definito dall'utente.

target
IInputElement

La destinazione del comando.

Restituisce

true se il comando può essere eseguito in corrispondenza della destinazione corrente del comando. In caso contrario false.

Attributi

Eccezioni

target non è un oggetto UIElementContentElement.

Esempio

L'esempio seguente è un CanExecuteChanged gestore eventi da un'implementazione personalizzata di ICommandSource.

this.Command in questo esempio è la Command proprietà in ICommandSource. Se il comando non nullè , il comando viene eseguito il cast in un RoutedCommandoggetto . Se il comando è un RoutedCommand, il CanExecute metodo viene chiamato passando e CommandTarget .CommandParameter Se il comando non è un RoutedCommandoggetto , viene eseguito il cast in un ICommand oggetto e il CanExecute metodo viene chiamato passando l'oggetto CommandParameter.

Se il CanExecute metodo restituisce true, il controllo è abilitato; in caso contrario, il controllo è disabilitato.

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

Commenti

La logica effettiva che determina se un RoutedCommand oggetto può essere eseguito nella destinazione del comando corrente non è contenuto nei CanExecute metodi, invece CanExecute genera gli eventi che eseguono il tunneling e la PreviewCanExecuteCanExecute bolla dell'albero degli elementi cercando un oggetto con un CommandBindingoggetto . Se viene trovato un CommandBinding oggetto per questo RoutedCommand , viene chiamato l'oggetto CanExecuteRoutedEventHandlerCommandBinding associato. Questi gestori forniscono la logica di programmazione per determinare se l'oggetto RoutedCommand può eseguire o meno.

Gli PreviewCanExecute eventi e PreviewExecuted vengono generati in CommandTarget. Se l'oggetto CommandTarget non è impostato su ICommandSource, gli PreviewCanExecute eventi e CanExecute vengono generati sull'elemento con lo stato attivo della tastiera.

Si applica a