RoutedCommand.CanExecute(Object, IInputElement) Metodo
Definizione
Importante
Alcune informazioni sono relative alla release non definitiva del prodotto, che potrebbe subire modifiche significative prima della release definitiva. Microsoft non riconosce alcuna garanzia, espressa o implicita, in merito alle informazioni qui fornite.
Determina se questo oggetto RoutedCommand può essere eseguito nello stato corrente.
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
Parametri
- parameter
- Object
Tipo di dati definito dall'utente.
- target
- IInputElement
La destinazione del comando.
Restituisce
true
se il comando può essere eseguito in corrispondenza della destinazione corrente del comando. In caso contrario false
.
- Attributi
Eccezioni
target
non è un oggetto UIElement né ContentElement.
Esempio
L'esempio seguente è un CanExecuteChanged gestore eventi da un'implementazione personalizzata di ICommandSource.
this.Command
in questo esempio è la Command proprietà in ICommandSource. Se il comando non null
è , il comando viene eseguito il cast in un RoutedCommandoggetto . Se il comando è un RoutedCommand, il CanExecute metodo viene chiamato passando e CommandTarget .CommandParameter Se il comando non è un RoutedCommandoggetto , viene eseguito il cast in un ICommand oggetto e il CanExecute metodo viene chiamato passando l'oggetto CommandParameter.
Se il CanExecute metodo restituisce true
, il controllo è abilitato; in caso contrario, il controllo è disabilitato.
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
Commenti
La logica effettiva che determina se un RoutedCommand oggetto può essere eseguito nella destinazione del comando corrente non è contenuto nei CanExecute metodi, invece CanExecute genera gli eventi che eseguono il tunneling e la PreviewCanExecuteCanExecute bolla dell'albero degli elementi cercando un oggetto con un CommandBindingoggetto . Se viene trovato un CommandBinding oggetto per questo RoutedCommand , viene chiamato l'oggetto CanExecuteRoutedEventHandlerCommandBinding associato. Questi gestori forniscono la logica di programmazione per determinare se l'oggetto RoutedCommand può eseguire o meno.
Gli PreviewCanExecute eventi e PreviewExecuted vengono generati in CommandTarget. Se l'oggetto CommandTarget non è impostato su ICommandSource, gli PreviewCanExecute eventi e CanExecute vengono generati sull'elemento con lo stato attivo della tastiera.