RoutedCommand.CanExecute(Object, IInputElement) Method

Definition

Determina se questo oggetto RoutedCommand può essere eseguito nello stato corrente.Determines whether this RoutedCommand can execute in its current state.

public:
 bool CanExecute(System::Object ^ parameter, System::Windows::IInputElement ^ target);
public bool CanExecute (object parameter, System.Windows.IInputElement target);
[System.Security.SecurityCritical]
public bool CanExecute (object parameter, System.Windows.IInputElement target);
member this.CanExecute : obj * System.Windows.IInputElement -> bool
Public Function CanExecute (parameter As Object, target As IInputElement) As Boolean

Parameters

parameter
Object

Tipo di dati definito dall'utente.A user defined data type.

target
IInputElement

Destinazione del comando.The command target.

Returns

Boolean

true se il comando può essere eseguito in corrispondenza della destinazione corrente del comando. In caso contrario false.true if the command can execute on the current command target; otherwise, false.

Attributes

Exceptions

target non è un oggetto UIElementContentElement.target is not a UIElement or ContentElement.

Examples

Nell'esempio seguente viene riportato un CanExecuteChanged gestore dell'evento da un'implementazione personalizzata di ICommandSource.The following example is a CanExecuteChanged event handler from a custom implementation of ICommandSource.

this.Command in questo esempio è la proprietà Command nel ICommandSource.this.Command in this example is the Command property on the ICommandSource. Se il comando non è null, viene eseguito il cast del comando a una RoutedCommand.If the command is not null, the command is cast to a RoutedCommand. Se il comando è un RoutedCommand, viene chiamato il metodo CanExecute passando il CommandTarget e il CommandParameter.If the command is a RoutedCommand, then the CanExecute method is called passing the CommandTarget and the CommandParameter. Se Command non è un RoutedCommand, viene eseguito il cast a una ICommand e il metodo CanExecute viene chiamato passando il CommandParameter.If command is not a RoutedCommand, it is cast to an ICommand and the CanExecute method is called passing the CommandParameter.

Se il metodo CanExecute restituisce true, il controllo è abilitato; in caso contrario, il controllo è disabilitato.If the CanExecute method returns true, then the control is enabled; otherwise, the control is disable.

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

Remarks

La logica effettiva che determina se un RoutedCommand può essere eseguito sulla destinazione del comando corrente non è contenuta nei metodi di CanExecute, piuttosto CanExecute genera il PreviewCanExecute e gli eventi di CanExecute che eseguono il tunneling e la bolla tramite la struttura ad albero degli elementi che cerca un oggetto con CommandBinding.The actual logic that determines if a RoutedCommand can execute on the current command target is not contained in the CanExecute methods, rather CanExecute raises the PreviewCanExecute and the CanExecute events which tunnel and bubble through element tree looking for a object with a CommandBinding. Se viene individuato un CommandBinding per tale RoutedCommand, viene chiamato il CanExecuteRoutedEventHandler collegato a CommandBinding.If a CommandBinding for that RoutedCommand is found, then the CanExecuteRoutedEventHandler attached to CommandBinding is called. Questi gestori forniscono la logica di programmazione per determinare se il RoutedCommand può essere eseguito o meno.These handlers supply the programming logic for determining if the RoutedCommand can execute or not.

Gli eventi PreviewCanExecute e PreviewExecuted vengono generati nella CommandTarget.The PreviewCanExecute and PreviewExecuted events are raised on the CommandTarget. Se il CommandTarget non è impostato sul ICommandSource, vengono generati gli eventi di PreviewCanExecute e CanExecute sull'elemento con lo stato attivo della tastiera.If the CommandTarget is not set on the ICommandSource, the PreviewCanExecute and CanExecute events are raised on the element with keyboard focus.

Applies to