Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
El siguiente ejemplo muestra cómo conectar un RoutedCommand a un Control que no tiene soporte integrado para el comando. Para obtener un ejemplo completo en el que se conectan comandos a varios orígenes, consulte el ejemplo Crear un Ejemplo de RoutedCommand Personalizado.
Ejemplo
Windows Presentation Foundation (WPF) proporciona una biblioteca de comandos comunes que los programadores de aplicaciones encuentran con regularidad. Las clases que componen la biblioteca de comandos son: ApplicationCommands, ComponentCommands, NavigationCommands, MediaCommandsy EditingCommands.
Los objetos estáticos RoutedCommand que componen estas clases no proporcionan lógica de comandos. La lógica del comando está asociada al comando con un CommandBinding. Muchos controles de WPF tienen compatibilidad integrada con algunos de los comandos de la biblioteca de comandos. TextBox, por ejemplo, admite muchos de los comandos de edición de la aplicación, como Paste, Copy, Cut, Redoy Undo. El desarrollador de aplicaciones no tiene que hacer nada especial para que estos comandos funcionen con estos controles. Si TextBox es el destino del comando cuando se ejecuta, lo gestionará utilizando el CommandBinding que está integrado en el control.
A continuación, se muestra cómo usar un Button como fuente de comandos para el comando Open. Se crea un objeto que asocia el objeto especificado CommandBinding, el CanExecuteRoutedEventHandler y el CanExecuteRoutedEventHandler con el RoutedCommand.
En primer lugar, se crea el origen del comando. Button Se usa como origen del comando.
<Button Command="ApplicationCommands.Open" Name="MyButton"
Height="50" Width="200">
Open (KeyBindings: Ctrl+R, Ctrl+0)
</Button>
// Button used to invoke the command
Button CommandButton = new Button();
CommandButton.Command = ApplicationCommands.Open;
CommandButton.Content = "Open (KeyBindings: Ctrl-R, Ctrl-0)";
MainStackPanel.Children.Add(CommandButton);
' Button used to invoke the command
Dim CommandButton As New Button()
CommandButton.Command = ApplicationCommands.Open
CommandButton.Content = "Open (KeyBindings: Ctrl-R, Ctrl-0)"
MainStackPanel.Children.Add(CommandButton)
A continuación, se crean el ExecutedRoutedEventHandler y el CanExecuteRoutedEventHandler. Simplemente ExecutedRoutedEventHandler abre un MessageBox para indicar que se ejecutó el comando.
CanExecuteRoutedEventHandler establece la propiedad CanExecute en true
. Normalmente, el controlador realizaría comprobaciones más exhaustivas para ver si el comando podría ejecutarse en el destinatario de comando actual.
void OpenCmdExecuted(object target, ExecutedRoutedEventArgs e)
{
String command, targetobj;
command = ((RoutedCommand)e.Command).Name;
targetobj = ((FrameworkElement)target).Name;
MessageBox.Show("The " + command + " command has been invoked on target object " + targetobj);
}
void OpenCmdCanExecute(object sender, CanExecuteRoutedEventArgs e)
{
e.CanExecute = true;
}
Private Sub OpenCmdExecuted(ByVal sender As Object, ByVal e As ExecutedRoutedEventArgs)
Dim command, targetobj As String
command = CType(e.Command, RoutedCommand).Name
targetobj = CType(sender, FrameworkElement).Name
MessageBox.Show("The " + command + " command has been invoked on target object " + targetobj)
End Sub
Private Sub OpenCmdCanExecute(ByVal sender As Object, ByVal e As CanExecuteRoutedEventArgs)
e.CanExecute = True
End Sub
Por último, en la raíz CommandBinding de la aplicación se crea un Window que asocia los controladores de eventos enrutados al comando Open.
<Window.CommandBindings>
<CommandBinding Command="ApplicationCommands.Open"
Executed="OpenCmdExecuted"
CanExecute="OpenCmdCanExecute"/>
</Window.CommandBindings>
// Creating CommandBinding and attaching an Executed and CanExecute handler
CommandBinding OpenCmdBinding = new CommandBinding(
ApplicationCommands.Open,
OpenCmdExecuted,
OpenCmdCanExecute);
this.CommandBindings.Add(OpenCmdBinding);
' Creating CommandBinding and attaching an Executed and CanExecute handler
Dim OpenCmdBinding As New CommandBinding(ApplicationCommands.Open, AddressOf OpenCmdExecuted, AddressOf OpenCmdCanExecute)
Me.CommandBindings.Add(OpenCmdBinding)
Consulte también
.NET Desktop feedback