RoutedCommand.CanExecute(Object, IInputElement) 方法
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
确定此 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 引发 PreviewCanExecute 和 CanExecute 事件,这些事件通过元素树通过隧道和气泡来查找具有 的 CommandBinding对象。 CommandBinding如果找到 的 RoutedCommand ,则CanExecuteRoutedEventHandler调用 附加到CommandBinding的 。 这些处理程序提供编程逻辑,用于确定是否 RoutedCommand 可以执行。
和 PreviewCanExecutePreviewExecuted 事件在 上 CommandTarget引发。 CommandTarget如果未在 上ICommandSource设置 ,PreviewCanExecute则使用键盘焦点在 元素上引发 和 CanExecute 事件。