Sdílet prostřednictvím


RoutedCommand.CanExecute(Object, IInputElement) Metoda

Definice

Určuje, jestli se to RoutedCommand může provést v aktuálním stavu.

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

Parametry

parameter
Object

Datový typ definovaný uživatelem.

target
IInputElement

Cíl příkazu.

Návraty

truepokud příkaz může provést v aktuálním cíli příkazu; v opačném případě . false

Atributy

Výjimky

Příklady

Následující příklad je obslužná rutina CanExecuteChanged události z vlastní implementace ICommandSource.

this.Command v tomto příkladu Command je vlastnost v objektu ICommandSource. Pokud příkaz není null, příkaz se přetypuje na .RoutedCommand Pokud je příkazem RoutedCommand, pak CanExecute metoda se nazývá předávání CommandTarget a CommandParameter. Pokud příkaz není RoutedCommand, je přetypován na a ICommandCanExecute metoda je volána předání CommandParameter.

Pokud metoda CanExecute vrátí true, je ovládací prvek povolen; jinak je ovládací prvek zakázán.

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

Poznámky

Skutečná logika, která určuje, zda RoutedCommand lze provést na aktuálním cíli příkazu, není obsažena v CanExecute metodách, spíše CanExecute vyvolává PreviewCanExecute události CanExecute , které tunel a bubliny prostřednictvím stromu prvků hledají objekt s CommandBinding. Pokud je nalezena CommandBinding hodnota, RoutedCommand volá se CanExecuteRoutedEventHandler připojený k CommandBinding němu. Tyto obslužné rutiny poskytují programovací logiku pro určení, jestli RoutedCommand se může provést nebo ne.

Události PreviewCanExecute a PreviewExecuted události jsou vyvolány na CommandTarget. Pokud není nastaven na CommandTarget , ICommandSourcePreviewCanExecute a CanExecute události jsou vyvolány na prvku s fokusem klávesnice.

Platí pro