Практическое руководство. Создание маршрутизируемой команды RoutedCommand
Обновлен: Ноябрь 2007
В этом примере показано, как создать пользовательскую маршрутизируемую команду RoutedCommand и способ реализации пользовательской команды путем создания ExecutedRoutedEventHandler и CanExecuteRoutedEventHandler и присоединения их к CommandBinding. Дополнительные сведения о работе с командами см. в разделе Общие сведения о системе команд.
Пример
Первым шагом для создания маршрутизируемой команды RoutedCommand является определение команды и создание ее экземпляра.
public static RoutedCommand CustomRoutedCommand = new RoutedCommand();
Чтобы использовать команды в приложении, не нужно создавать обработчики событий, которые определяют эти команды.
private void ExecutedCustomCommand(object sender,
ExecutedRoutedEventArgs e)
{
MessageBox.Show("Custom Command Executed");
}
// CanExecuteRoutedEventHandler that only returns true if
// the source is a control.
private void CanExecuteCustomCommand(object sender,
CanExecuteRoutedEventArgs e)
{
Control target = e.Source as Control;
if(target != null)
{
e.CanExecute = true;
}
else
{
e.CanExecute = false;
}
}
Далее создается CommandBinding, который связывает команду с обработчиками событий. Создается CommandBinding на определенном объекте. Этот объект определяет область CommandBinding в дереве элементов
<Window x:Class="SDKSamples.Window1"
xmlns="https://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="https://schemas.microsoft.com/winfx/2006/xaml"
xmlns:custom="clr-namespace:SDKSamples"
Height="600" Width="800"
>
<Window.CommandBindings>
<CommandBinding Command="{x:Static custom:Window1.CustomRoutedCommand}"
Executed="ExecutedCustomCommand"
CanExecute="CanExecuteCustomCommand" />
</Window.CommandBindings>
CommandBinding customCommandBinding = new CommandBinding(
CustomRoutedCommand, ExecutedCustomCommand, CanExecuteCustomCommand);
// attach CommandBinding to root window
this.CommandBindings.Add(customCommandBinding);
Последним шагом является вызов команды. Одним из способов вызова команды является связывание ее с ICommandSource, например Button.
<StackPanel>
<Button Command="{x:Static custom:Window1.CustomRoutedCommand}"
Content="CustomRoutedCommand"/>
</StackPanel>
// create the ui
StackPanel CustomCommandStackPanel = new StackPanel();
Button CustomCommandButton = new Button();
CustomCommandStackPanel.Children.Add(CustomCommandButton);
CustomCommandButton.Command = CustomRoutedCommand;
При нажатии кнопки вызывается метод Execute для пользовательской маршрутизируемой команде RoutedCommand. RoutedCommand создает маршрутизируемые события PreviewExecuted и Executed. Эти события проходят по дереву элементов в поисках CommandBinding для этой конкретной команды. Если найден CommandBinding, то вызывается обработчик ExecutedRoutedEventHandler, связанный с CommandBinding.
См. также
Основные понятия
Общие сведения о системе команд