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。 command が ではない 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、 を持つオブジェクトを探して要素ツリーをトンネルしてバブルする イベントと CanExecute イベントをCommandBinding発生させますPreviewCanExecute。 CommandBindingがRoutedCommand見つかった場合は、 にCanExecuteRoutedEventHandlerCommandBindingアタッチされている が呼び出されます。 これらのハンドラーは、 が実行できるかどうかを判断するためのプログラミング ロジックを RoutedCommand 提供します。
PreviewCanExecuteイベントと PreviewExecuted イベントは、 で発生しますCommandTarget。 CommandTargetが にICommandSourcePreviewCanExecute設定されていない場合、 イベントと CanExecute イベントは、キーボード フォーカスを持つ 要素で発生します。
適用対象
.NET