RoutedCommand.CanExecute(Object, IInputElement) Método

Definição

Determina se este RoutedCommand pode ser executado no seu estado atual.

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

Parâmetros

parameter
Object

Um tipo de dado definido pelo utilizador.

target
IInputElement

O alvo de comando.

Devoluções

true se o comando puder ser executado no alvo atual do comando; caso contrário, false.

Atributos

Exceções

Exemplos

O exemplo seguinte é um CanExecuteChanged gestor de eventos de uma implementação personalizada de ICommandSource.

this.Command neste exemplo é a Command propriedade sobre o ICommandSource. Se o comando não nullfor , o comando é lançado para um RoutedCommand. Se o comando for um RoutedCommand, então o CanExecute método é chamado passar o CommandTarget e o CommandParameter. Se o comando não for um RoutedCommand, ele é lançado para um ICommand e o CanExecute método é chamado passar o CommandParameter.

Se o CanExecute método devolver true, então o controlo está ativado; caso contrário, o controlo está desativado.

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

Observações

A lógica real que determina se a RoutedCommand pode executar no alvo de comando atual não está contida nos CanExecute métodos, mas sim CanExecute levanta os CanExecutePreviewCanExecute eventos e que tunelam e fazem bubble através da árvore de elementos à procura de um objeto com um CommandBinding. Se for encontrado um CommandBinding para isso RoutedCommand , então o CanExecuteRoutedEventHandler ligado a CommandBinding é chamado. Estes manipuladores fornecem a lógica de programação para determinar se podem RoutedCommand executar ou não.

Os PreviewCanExecute eventos e PreviewExecuted são levantados no CommandTarget. Se o CommandTarget não estiver definido no ICommandSource, os PreviewCanExecute eventos e CanExecute são elevados no elemento com foco do teclado.

Aplica-se a