RoutedCommand.CanExecuteChanged 事件
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
發生於命令管理員偵測命令來源時。 這些變更通常會影響命令是否應在目前命令目標上執行。
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 呼叫 方法會傳遞 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 接 RequerySuggested 聽 由引發的事件 CommandManager。 RequerySuggested每當符合可變更命令是否應該執行的條件時,就會引發 事件,例如鍵盤焦點的變更。 當命令收到 事件時 RequerySuggested ,它會引發 CanExecuteChanged 事件。 一般而言,命令來源會接聽此事件,並透過 CanExecute 方法查詢 RoutedCommand 。 如果命令無法執行,大部分的命令來源都會自行停用,做為其命令系結的一部分。 其中一個範例是 MenuItem 當命令無法執行時,灰色本身。
在某些情況下, CommandManager 不會察覺變更會改變命令執行的能力。 在這些情況下,您可以呼叫 InvalidateRequerySuggested 方法來強制 CommandManager 引發 RequerySuggested 事件,這會導致 RoutedCommand 引發 CanExecuteChanged 事件。