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