Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
WPF-практика 5 События и команды.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
2.21 Mб
Скачать

Упражнение 5. Привязка команд в процедурном коде

Частично повторим предыдущее упражнение, но привязку команд выполним в процедурном коде.

  • Добавьте к решению командой File/Add/New Project новый проект с именем BindingCommandsCode и назначьте его стартовым

увеличить изображение

  • Откорректируйте разметку окна Window1 так

<Window x:Class="BindingCommandsCode.Window1"

xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"

xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

Title="Window1: Кодовая привязка" Height="300" Width="300"

Background="#FFD4D0C8"

WindowStartupLocation="CenterScreen"

>

<StackPanel Margin="5">

<Menu>

<MenuItem Header="_File">

<MenuItem Command="ApplicationCommands.Open" />

<MenuItem Command="ApplicationCommands.Save" />

</MenuItem>

</Menu>

<Button Margin="5" Padding="5" Focusable="False"

Command="ApplicationCommands.Open"

Content="Open"

/>

<Button Margin="5" Padding="5" Focusable="False"

Command="ApplicationCommands.Save"

Content="Save"

/>

</StackPanel>

</Window>

Заметьте, что в этой разметке отсутствует как секция привязки команд, так и ссылки на обработчики команд. Все это мы выполним в процедурной части окна.

  • Внесите следующие изменения в класс Window1 файла процедурного кода Window1.xaml.cs

public partial class Window1 : Window

{

public Window1()

{

InitializeComponent();

// Регистрация обработчика

this.Loaded += new RoutedEventHandler(Window1_Loaded);

}

void Window1_Loaded(object sender, RoutedEventArgs e)

{

// Привязка команд в коде

CommandBinding binding = new CommandBinding();

binding.Command = ApplicationCommands.Open;

binding.Executed +=

new ExecutedRoutedEventHandler(OpenCommand_Executed);

this.CommandBindings.Add(binding);

binding = new CommandBinding();

binding.Command = ApplicationCommands.Save;

binding.Executed +=

new ExecutedRoutedEventHandler(SaveCommand_Executed);

this.CommandBindings.Add(binding);

}

void OpenCommand_Executed(object sender, ExecutedRoutedEventArgs e)

{

MessageBox.Show("Выполнена команда Open");

}

void SaveCommand_Executed(object sender, ExecutedRoutedEventArgs e)

{

MessageBox.Show("Выполнена команда Save");

}

}

  • Запустите приложение и убедитесь в работоспособности механизма команд WPF

Жесты как источники команд

Комбинации клавиш, предоставляющие прямой доступ к выполнению команд меню, ранее называли акселераторами (ускорителями), теперь - жестами. Жесты можно хранить в самой команде в коллекции InputGestures, а можно хранить в прослушивающем элементе в коллекции InputBindings наряду с командой. Кроме интерфейсных элементов жесты могут служить еще одним источником команд. Команда, имеющая жесты в своей коллекции, может вообще не быть присоединенной ни к одному из визуальных элементов, а возбуждаться только жестами.