Вам нужен код, одно событие сообщает команде, может ли она быть выполнена (обычно не более нескольких строк), другое - что нужно делать, поэтому каждый связанный с ним элемент управления делает то же самое. Вот очень простой пример:
XAML:
<UserControl x:Class="WPFTests.AppCommands"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Height="300" Width="300">
<UserControl.CommandBindings>
<CommandBinding Command="ApplicationCommands.New" CanExecute="CommandBinding_CanExecute" Executed="CommandBinding_Executed" />
</UserControl.CommandBindings>
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<CheckBox Grid.Row="0" Height="16" Name="checkBoxCanExecute" Margin="8" IsChecked="true">Can execute</CheckBox>
<Button Grid.Row="1" Height="24" Padding="8,0,8,0" HorizontalAlignment="Left" Margin="8" Command="ApplicationCommands.New">ApplicationCommand.New</Button>
</Grid>
</UserControl>
C #
с использованием System.Windows;
использование System.Windows.Controls;
используя System.Windows.Input;
namespace WPFTests
{
/// <summary>
/// Interaction logic for AppCommands.xaml
/// </summary>
public partial class AppCommands : UserControl
{
public AppCommands()
{
InitializeComponent();
}
private void CommandBinding_CanExecute(object sender, CanExecuteRoutedEventArgs e)
{
e.CanExecute = (bool)checkBoxCanExecute.IsChecked;
}
private void CommandBinding_Executed(object sender, ExecutedRoutedEventArgs e)
{
MessageBox.Show("New executed");
}
}
}
РЕДАКТИРОВАТЬ: По запросу RichardOD. Вот немного больше информации, которую я разместил в своем комментарии:
<Button Command="ApplicationCommands.New">
Это ставит жест клавиатуры Ctrl + N на кнопку. Если бы вы должны были сделать
<Button Command="ApplicationCommands.Open">
Было бы поставить Ctrl + O. Это неявно реализовано в CommandBindings WPF. Вы даже можете создать свою собственную команду своим собственным жестом. И если вы привяжете команду к пункту меню, она автоматически покажет жест рядом с именем команды без каких-либо дополнительных усилий, просто:
<MenuItem Command="ApplicationCommands.New" />
Это покажет [Новый Ctrl + N] в пункте меню.