WPF: comandos enrutados
RoutedCommands habilita el manejo de entrada a un nivel más semántico. En realidad, estas son instrucciones simples como Nuevo, Abrir, Copiar, Cortar y Guardar. Estos comandos son muy útiles y se puede acceder a ellos desde un menú o desde un atajo de teclado. Desactiva los controles si el comando deja de estar disponible. El siguiente ejemplo define los comandos para los elementos del menú.
Creemos un nuevo proyecto WPF con el nombre WPFCommandsInput.
Arrastre un control de menú a un panel de pila y establezca las siguientes propiedades y comandos como se muestra en el siguiente archivo XAML.
<Window x:Class = "WPFContextMenu.MainWindow"
xmlns = "http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x = "http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d = "http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc = "http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local = "clr-namespace:WPFContextMenu"
mc:Ignorable = "d" Title = "MainWindow" Height = "350" Width = "525">
<Grid>
<StackPanel x:Name = "stack" Background = "Transparent">
<StackPanel.ContextMenu>
<ContextMenu>
<MenuItem Header = "New" Command = "New" />
<MenuItem Header = "Open" Command = "Open" />
<MenuItem Header = "Save" Command = "Save" />
</ContextMenu>
</StackPanel.ContextMenu>
<Menu>
<MenuItem Header = "File" >
<MenuItem Header = "New" Command = "New" />
<MenuItem Header = "Open" Command = "Open" />
<MenuItem Header = "Save" Command = "Save" />
</MenuItem>
</Menu>
</StackPanel>
</Grid>
</Window>
Aquí está el código C # en el que se manejan diferentes comandos.
using System.Windows;
using System.Windows.Input;
namespace WPFContextMenu {
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window {
public MainWindow() {
InitializeComponent();
CommandBindings.Add(new CommandBinding(ApplicationCommands.New, NewExecuted, CanNew));
CommandBindings.Add(new CommandBinding(ApplicationCommands.Open, OpenExecuted, CanOpen));
CommandBindings.Add(new CommandBinding(ApplicationCommands.Save, SaveExecuted, CanSave));
}
private void NewExecuted(object sender, ExecutedRoutedEventArgs e) {
MessageBox.Show("You want to create new file.");
}
private void CanNew(object sender, CanExecuteRoutedEventArgs e) {
e.CanExecute = true;
}
private void OpenExecuted(object sender, ExecutedRoutedEventArgs e) {
MessageBox.Show("You want to open existing file.");
}
private void CanOpen(object sender, CanExecuteRoutedEventArgs e) {
e.CanExecute = true;
}
private void SaveExecuted(object sender, ExecutedRoutedEventArgs e) {
MessageBox.Show("You want to save a file.");
}
private void CanSave(object sender, CanExecuteRoutedEventArgs e) {
e.CanExecute = true;
}
}
}
Cuando el código anterior se compila y ejecuta, producirá la siguiente ventana:
Ahora puede acceder a los elementos de este menú, ya sea desde el menú o desde los comandos de las teclas de acceso directo. Desde cualquiera de las opciones, ejecutará los comandos.