RoutedCommand.CanExecuteChanged 事件

定義

發生於命令管理員偵測命令來源時。 這些變更通常會影響命令是否應在目前命令目標上執行。

public:
 virtual event EventHandler ^ CanExecuteChanged;
public event EventHandler CanExecuteChanged;
member this.CanExecuteChanged : EventHandler 
Public Custom Event CanExecuteChanged As EventHandler 

事件類型

實作

範例

下列範例是 CanExecuteChanged 的自定義實作中的 ICommandSource事件處理程式。

this.Command 在此範例中是 Command 上的 ICommandSource屬性。 如果命令不是 null,則命令會轉換成 RoutedCommand。 如果指令是 RoutedCommand,則 CanExecute 呼叫 方法會傳遞 CommandTargetCommandParameter。 如果指令不是 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

備註

RoutedCommandRequerySuggested 聽 由引發的事件 CommandManagerRequerySuggested每當符合可變更命令是否應該執行的條件時,就會引發 事件,例如鍵盤焦點的變更。 當命令收到 事件時 RequerySuggested ,它會引發 CanExecuteChanged 事件。 一般而言,命令來源會接聽此事件,並透過 CanExecute 方法查詢 RoutedCommand 。 如果命令無法執行,大部分的命令來源都會自行停用,做為其命令系結的一部分。 其中一個範例是 MenuItem 當命令無法執行時,灰色本身。

在某些情況下, CommandManager 不會察覺變更會改變命令執行的能力。 在這些情況下,您可以呼叫 InvalidateRequerySuggested 方法來強制 CommandManager 引發 RequerySuggested 事件,這會導致 RoutedCommand 引發 CanExecuteChanged 事件。

適用於