Show / Hide Table of Contents

Практическое руководство. Создание маршрутизируемой команды RoutedCommand

В этом примере показано, как можно создавать пользовательские 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="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://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 вызывается.

См. также

  • RoutedCommand
  • Общие сведения о системе команд
Back to top Неофициальная документация по .NET на русском языке. Лицензия: CC-BY 4.0. Основано на документации по .NET с Microsoft Docs
Generated by DocFX