Присоединение команды к источнику

Чтобы команда работала, ее нужно присоединить к свойству Command источника команды. Источников, к которым присоединена одна и та же команда, может быть несколько. Элементы, к которым можно присоединить команду, должны наследовать интерфейс ICommandSource. Только такие элементы будут иметь свойство Command. Этих элементов в WPF немного и все они показаны на рисунке

 

Интерфейс ICommandSource реализует свои свойства в ближайших наследниках ButtonBase, Hyperlink, InputBinding, MenuItem по общему синтаксису:

public System.Windows.Input.ICommand Command { get; set; } public object CommandParameter { get; set; } public System.Windows.IInputElement CommandTarget { get; set; }

В источнике для присоединения команды достаточно присвоить значение только ссылке Command на объект команды (на экземпляр RoutedCommand или RoutedUICommand ). Остальные свойства являются необязательными и служат для уточнения команды:

  • CommandParameter - тип данных, определяемый пользователем, который используется для передачи информации обработчикам, реализующим команду
  • CommandTarget - идентифицирует элемент, в котором должна выполняться данная команда. Если значение свойства CommandTarget не задано, в качестве цели команды используется элемент, в котором установлен фокус ввода

Обратите внимание, что два наследуемые источниками команд свойства-ссылки Command и CommandTarget имеют типы интерфейсов, что позволяет адресовать любые команды и целевые элементы, наследующие эти интерфейсы.

Вот, например, как можно присоединить команду Paste к элементу меню в разметке

<StackPanel> <Menu Header="Edit"> <MenuItem Command="ApplicationCommands.Paste" /> </Menu> <TextBox /></StackPanel>

Для библиотечных команд синтаксис разметки допускает использование сокращенной записи, например

<StackPanel> <Menu Header="Edit"> <MenuItem Command="Paste" /> </Menu> <TextBox /></StackPanel>

Теперь, если объект TextBox имеет фокус ввода и буфер обмена содержит текст, то при выборе пользователем этого пункта меню текст из буфера будет вставлен в элемент TextBox. Обратите внимание, что объект MenuItem не устанавливает свойство Header для отображения в нем названия команды Paste. Если свойство для текста названия команды в источнике опущено, то источник способен сам извлекать эту информацию из объекта присоединенной команды.

А вот альтернативный вариант присоединения команды Paste к элементу меню в процедурном коде

// Создание объектов пользовательского интерфейсаStackPanel mainStackPanel = new StackPanel();TextBox pasteTextBox = new TextBox();Menu stackPanelMenu = new Menu();MenuItem pasteMenuItem = new MenuItem(); // Добавление объектов в коллекции панели и менюstackPanelMenu.Items.Add(pasteMenuItem);mainStackPanel.Children.Add(stackPanelMenu);mainStackPanel.Children.Add(pasteTextBox); // Присоединение библиотечной команды Paste к источнику командpasteMenuItem.Command = ApplicationCommands.Paste;

Аналогичный пример можно привести для присоединения команды к контекстному меню.

<StackPanel> <StackPanel.ContextMenu> <ContextMenu> <MenuItem Command="ApplicationCommands.Paste" /> </ContextMenu> </StackPanel.ContextMenu></StackPanel>// Создание объектов пользовательского интерфейсаStackPanel cmdSourcePanel = new StackPanel();ContextMenu cmdSourceContextMenu = new ContextMenu();MenuItem cmdSourceMenuItem = new MenuItem(); // Добавление ContextMenu в StackPanelcmdSourcePanel.ContextMenu = cmdSourceContextMenu;cmdSourcePanel.ContextMenu.Items.Add(cmdSourceMenuItem); // Присоединение библиотечной команды Paste к источнику командcmdSourceMenuItem.Command = ApplicationCommands.Paste;







Дата добавления: 2015-04-15; просмотров: 680;


Поиск по сайту:

При помощи поиска вы сможете найти нужную вам информацию.

Поделитесь с друзьями:

Если вам перенёс пользу информационный материал, или помог в учебе – поделитесь этим сайтом с друзьями и знакомыми.
helpiks.org - Хелпикс.Орг - 2014-2024 год. Материал сайта представляется для ознакомительного и учебного использования. | Поддержка
Генерация страницы за: 0.003 сек.