RoutedCommand.CanExecute(Object, IInputElement) Método
Definición
Importante
Parte de la información hace referencia a la versión preliminar del producto, que puede haberse modificado sustancialmente antes de lanzar la versión definitiva. Microsoft no otorga ninguna garantía, explícita o implícita, con respecto a la información proporcionada aquí.
Determina si este RoutedCommand puede ejecutarse en su estado actual.
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
Parámetros
- parameter
- Object
Tipo de datos definido por el usuario.
- target
- IInputElement
Destino del comando.
Devoluciones
Es true
si el comando puede ejecutarse en el destino de comando actual; de lo contrario, es false
.
- Atributos
Excepciones
target
no es UIElement ni ContentElement.
Ejemplos
El ejemplo siguiente es un CanExecuteChanged controlador de eventos de una implementación personalizada de ICommandSource.
this.Command
en este ejemplo es la Command propiedad de .ICommandSource Si el comando no null
es , el comando se convierte en .RoutedCommand Si el comando es , RoutedCommandse llama al CanExecute método pasando y CommandTarget .CommandParameter Si el comando no es , RoutedCommandse convierte en y ICommand se llama al CanExecute método pasando .CommandParameter
Si el CanExecute método devuelve true
, el control está habilitado; de lo contrario, el control se deshabilita.
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
Comentarios
La lógica real que determina si un RoutedCommand objeto se puede ejecutar en el destino de comando actual no está contenido en los CanExecute métodos, sino CanExecute que genera los PreviewCanExecute eventos y CanExecute que tuneliza y propagan a través del árbol de elementos que buscan un objeto con .CommandBinding Si se encuentra un CommandBinding para , RoutedCommandCanExecuteRoutedEventHandler se llama al adjunto a CommandBinding . Estos controladores proporcionan la lógica de programación para determinar si se RoutedCommand puede ejecutar o no.
Los PreviewCanExecute eventos y PreviewExecuted se generan en .CommandTarget CommandTarget Si no se establece en ICommandSource, los PreviewCanExecute eventos y CanExecute se generan en el elemento con foco de teclado.