次の方法で共有


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

属性

例外

targetUIElement または 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発生させますPreviewCanExecuteCommandBindingRoutedCommand見つかった場合は、 にCanExecuteRoutedEventHandlerCommandBindingアタッチされている が呼び出されます。 これらのハンドラーは、 が実行できるかどうかを判断するためのプログラミング ロジックを RoutedCommand 提供します。

PreviewCanExecuteイベントと PreviewExecuted イベントは、 で発生しますCommandTargetCommandTargetが にICommandSourcePreviewCanExecute設定されていない場合、 イベントと CanExecute イベントは、キーボード フォーカスを持つ 要素で発生します。

適用対象