RoutedCommand.CanExecute(Object, IInputElement) メソッド

定義

現在の状態でこの RoutedCommand を実行できるかどうかを判断します。Determines whether this RoutedCommand can execute in its current state.

public:
 bool CanExecute(System::Object ^ parameter, System::Windows::IInputElement ^ target);
public bool CanExecute (object parameter, System.Windows.IInputElement target);
[System.Security.SecurityCritical]
public bool CanExecute (object parameter, System.Windows.IInputElement target);
member this.CanExecute : obj * System.Windows.IInputElement -> bool
Public Function CanExecute (parameter As Object, target As IInputElement) As Boolean

パラメーター

parameter
Object

ユーザー定義のデータ型。A user defined data type.

target
IInputElement

コマンドのターゲット。The command target.

戻り値

Boolean

現在のコマンドの対象に対してコマンドを実行できる場合は true。それ以外の場合は falsetrue if the command can execute on the current command target; otherwise, false.

属性

例外

targetUIElement または ContentElement ではありません。target is not a UIElement or ContentElement.

次の例は、ICommandSourceのカスタム実装の CanExecuteChanged イベントハンドラーです。The following example is a CanExecuteChanged event handler from a custom implementation of ICommandSource.

この例の this.Command は、ICommandSourceCommand プロパティです。this.Command in this example is the Command property on the ICommandSource. コマンドが nullされていない場合、コマンドは RoutedCommandにキャストされます。If the command is not null, the command is cast to a RoutedCommand. コマンドが RoutedCommandの場合、CommandTargetCommandParameterを渡す CanExecute メソッドが呼び出されます。If the command is a RoutedCommand, then the CanExecute method is called passing the CommandTarget and the CommandParameter. コマンドが RoutedCommandでない場合は、ICommand にキャストされ、CanExecute メソッドが CommandParameterを渡して呼び出されます。If command is not a RoutedCommand, it is cast to an ICommand and the CanExecute method is called passing the CommandParameter.

CanExecute メソッドが trueを返すと、コントロールが有効になります。それ以外の場合、コントロールは無効になります。If the CanExecute method returns true, then the control is enabled; otherwise, the control is disable.

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 メソッドに含まれていません。 PreviewCanExecute と、要素ツリーを通じて、CanExecute を持つオブジェクトを検索するために使用する CommandBindingイベントを生成 CanExecute ます。The actual logic that determines if a RoutedCommand can execute on the current command target is not contained in the CanExecute methods, rather CanExecute raises the PreviewCanExecute and the CanExecute events which tunnel and bubble through element tree looking for a object with a CommandBinding. その RoutedCommandCommandBinding が見つかった場合、CommandBinding にアタッチされている CanExecuteRoutedEventHandler が呼び出されます。If a CommandBinding for that RoutedCommand is found, then the CanExecuteRoutedEventHandler attached to CommandBinding is called. これらのハンドラーは、RoutedCommand が実行できるかどうかを判断するためのプログラミングロジックを提供します。These handlers supply the programming logic for determining if the RoutedCommand can execute or not.

PreviewCanExecute イベントと PreviewExecuted イベントが CommandTargetで発生します。The PreviewCanExecute and PreviewExecuted events are raised on the CommandTarget. CommandTargetICommandSourceに設定されていない場合、キーボードフォーカスを持つ要素で PreviewCanExecute イベントと CanExecute イベントが発生します。If the CommandTarget is not set on the ICommandSource, the PreviewCanExecute and CanExecute events are raised on the element with keyboard focus.

適用対象