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


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 методах, а также CanExecute вызывает PreviewCanExecuteCanExecute события, которые туннелируются и пузырькируются через дерево элементов, ищет объект с CommandBindingобъектом. CommandBinding RoutedCommand Если для этого найдено, вызывается присоединенный CanExecuteRoutedEventHandlerCommandBinding объект. Эти обработчики предоставляют логику программирования для определения RoutedCommand возможности выполнения или нет.

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

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