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

属性

例外

示例

以下示例是 CanExecuteChanged 的自定义实现中的 ICommandSource事件处理程序。

this.Command 此示例中的 是 Command 上的 ICommandSource属性。 如果命令不是 null,则命令将强制转换为 RoutedCommand。 如果命令为 , RoutedCommandCanExecute 调用 方法传递 CommandTargetCommandParameter。 如果 命令不是 , RoutedCommand则将其强制转换为 , ICommandCanExecute 调用 方法传递 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 ,则CanExecuteRoutedEventHandler调用 附加到CommandBinding的 。 这些处理程序提供编程逻辑,用于确定是否 RoutedCommand 可以执行。

PreviewCanExecutePreviewExecuted 事件在 上 CommandTarget引发。 CommandTarget如果未在 上ICommandSource设置 ,PreviewCanExecute则使用键盘焦点在 元素上引发 和 CanExecute 事件。

适用于