Поделиться через


RoutedCommand.CanExecute(Object, IInputElement) Метод

Определение

Определяет, может ли данная команда RoutedCommand выполняться в ее текущем состоянии.

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
Object

Пользовательский тип данных.

target
IInputElement

Целевой объект команды.

Возвращаемое значение

true, если команда может выполняться для текущего целевого объекта команды; в противном случае — false.

Атрибуты

Исключения

Параметр target не является объектом UIElement или ContentElement.

Примеры

В следующем примере показан CanExecuteChanged обработчик событий из пользовательской реализации ICommandSource.

this.Command В этом примере является свойством Command объекта ICommandSource. Если команда не nullимеет значение , команда приводится к RoutedCommand. Если команда является RoutedCommand, метод CanExecute вызывается, передавая CommandTarget и CommandParameter. Если команда не RoutedCommandявляется , она приводится к ICommand и CanExecute вызывается методом передачи CommandParameter.

CanExecute Если метод возвращает true, элемент управления включен; в противном случае элемент управления отключается.

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

Комментарии

Фактическая логика, определяющаяRoutedCommand, может ли выполняться в текущем целевом объекте команды, не содержится в CanExecute методах PreviewCanExecute , а CanExecute вызывает события и CanExecute , которые туннелируются и пузырькиваются через дерево элементов для поиска объекта с CommandBinding. При обнаружении CommandBinding для RoutedCommand этого вызывается присоединенный объект .CommandBindingCanExecuteRoutedEventHandler Эти обработчики предоставляют логику программирования для определения RoutedCommand возможности выполнения .

События PreviewCanExecute и PreviewExecuted создаются для CommandTarget. CommandTarget Если значение не задано для ICommandSource, PreviewCanExecute события и CanExecute вызываются в элементе с фокусом клавиатуры.

Применяется к