Практическое руководство. Включение команды
Следующий пример демонстрирует использование команд в Windows Presentation Foundation (WPF). В примере показано связывание RoutedCommand для Button, создание CommandBindingи создавать обработчики событий, которые реализуют RoutedCommand. Дополнительные сведения о системе команд см. в разделе сведения о системе команд.
Пример
В первой части кода создает UI , который состоит из Button и StackPanelи создает CommandBinding , связывает обработчики команд с RoutedCommand.
Command Свойство Button связан с Close команды.
CommandBinding Добавляется CommandBindingCollection корневого Window. Executed И CanExecute обработчики событий подключенных к этой привязке и связанные с Close команды.
Без CommandBinding отсутствует логика команды, только механизм для вызова команды. Когда Button нажатии PreviewExecuted RoutedEvent вызывается для целевого объекта команды, за которым следует Executed RoutedEvent. Эти события проходят по дереву элементов, ищете CommandBinding для этой конкретной командой. Стоит отметить, что поскольку RoutedEvent проходят и поднимаются по дереву элементов, необходимо соблюдать осторожность, где CommandBinding помещается. Если CommandBinding на одноуровневого элемента для целевого объекта команды или другой узел, который не является в маршруте RoutedEvent, CommandBinding не затрагиваются.
<Window x:Class="WCSamples.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="CloseCommand"
Name="RootWindow"
>
<Window.CommandBindings>
<CommandBinding Command="ApplicationCommands.Close"
Executed="CloseCommandHandler"
CanExecute="CanExecuteHandler"
/>
</Window.CommandBindings>
<StackPanel Name="MainStackPanel">
<Button Command="ApplicationCommands.Close"
Content="Close File" />
</StackPanel>
</Window>
// Create ui elements.
StackPanel CloseCmdStackPanel = new StackPanel();
Button CloseCmdButton = new Button();
CloseCmdStackPanel.Children.Add(CloseCmdButton);
// Set Button's properties.
CloseCmdButton.Content = "Close File";
CloseCmdButton.Command = ApplicationCommands.Close;
// Create the CommandBinding.
CommandBinding CloseCommandBinding = new CommandBinding(
ApplicationCommands.Close, CloseCommandHandler, CanExecuteHandler);
// Add the CommandBinding to the root Window.
RootWindow.CommandBindings.Add(CloseCommandBinding);
В следующем разделе кода реализует Executed и CanExecute обработчики событий.
Executed Обработчик вызывает метод, чтобы закрыть открытый файл. CanExecute Обработчик вызывает метод, чтобы определить, открыт ли файл. Если файл был открыт, CanExecute присваивается true
; в противном случае он становится равным false
.
// Executed event handler.
private void CloseCommandHandler(object sender, ExecutedRoutedEventArgs e)
{
// Calls a method to close the file and release resources.
CloseFile();
}
// CanExecute event handler.
private void CanExecuteHandler(object sender, CanExecuteRoutedEventArgs e)
{
// Call a method to determine if there is a file open.
// If there is a file open, then set CanExecute to true.
if (IsFileOpened())
{
e.CanExecute = true;
}
// if there is not a file open, then set CanExecute to false.
else
{
e.CanExecute = false;
}
}