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 события создаются на элементе с фокусом клавиатуры.