Студопедия

Главная страница Случайная страница

КАТЕГОРИИ:

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






Упражнение 4. Привязка команд в разметке






Построим простое приложение, в котором присоединим библиотечные команды ApplicationCommands. Open и ApplicationCommands. Save, каждую - к двум элементам-источникам: кнопке и главному меню окна. Дополнительным источником команд будет уже встроенная в них клавиатурная комбинация Ctrl+O и Ctrl+S. В качестве прослушивающего элемента выберем окно. В коллекцию CommandBindings окна добавим два объекта привязки CommandBinding, связывающие между собой команду и обработчик. Привязку выполним в разметке XAML.

  • Добавьте к решению командой оболочки File/Add/New Project новый проект с именем BindingCommandsXAML и назначьте его стартовым в панели Solution Explorer командой контекстного меню Set as StartUp Project


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

  • Заполните файл разметки Window1.xaml следующим кодом
< Window x: Class=" BindingCommandsXAML.Window1" xmlns=" https://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns: x=" https://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>

Мы присоединили к интерфейсным элементам объекты команд и сделали их таким образом источниками этих команд.

  • Запустите проект и убедитесь, что источники команд не получают фокус ввода и являются недоступными

Несмотря на то, что в элементах меню нами не были заданы атрибуты Header, команды сами прописали нужные названия команд и добавили подсказки для горячих клавиш.

  • Добавьте в разметку объекты привязки следующим образом
< Window x: Class=" BindingCommandsXAML.Window1" xmlns=" https://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns: x=" https://schemas.microsoft.com/winfx/2006/xaml" Title=" Window1: Декларативная привязка" Height=" 300" Width=" 300" Background=" #FFD4D0C8" WindowStartupLocation=" CenterScreen" > < Window.CommandBindings> < CommandBinding Command=" ApplicationCommands.Open" Executed=" OpenCommand_Executed" > < /CommandBinding> < CommandBinding Command=" ApplicationCommands.Save" Executed=" SaveCommand_Executed" > < /CommandBinding> < /Window.CommandBindings> < 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>
  • Вызовите контекстное меню для записей привязки обработчиков и командой Navigate to Event Handler создайте заготовки обработчиков в файле процедурного кода
  • Запустите приложение и убедитесь, что источники команд стали доступными, хотя обработчики еще пустые
  • В меню оболочки командой Project/Add Reference добавьте к текущему проекту ссылку на библиотечную сборку System.Windows.Forms.dll

Мы уже обсуждали ранее, что нельзя напрямую размещать в окне WPF интерфейсные элементы Windows Forms, для этого предназначен переходной контейнер < WindowsFormsHost>. Но в нашем случае мы будем открывать самостоятельные диалоговые окна Windows Forms и не собираемся смешивать в одном окне интерфейсные элементы из разных технологий.

  • Дополните в процедурном файле Window1.xaml.cs класс Window1 следующим кодом
public partial class Window1: Window { public Window1() { InitializeComponent(); } // Обработчик команды Open System.Windows.Forms.OpenFileDialog openFileDialog = null; private void OpenCommand_Executed(object sender, ExecutedRoutedEventArgs e) { if (openFileDialog == null) openFileDialog = new System.Windows.Forms.OpenFileDialog(); openFileDialog.ShowDialog(); this.Focus(); } // Обработчик команды Save System.Windows.Forms.SaveFileDialog saveFileDialog = null; private void SaveCommand_Executed(object sender, ExecutedRoutedEventArgs e) { if (saveFileDialog == null) saveFileDialog = new System.Windows.Forms.SaveFileDialog(); saveFileDialog.ShowDialog(); this.Focus(); } }
  • Запустите приложение и испытайте возможность запуска каждой команды через любой из трех источников: кнопку, меню или клавиатурную комбинацию

Рекомендуется при совместном использовании библиотек WPF и Windows Forms не подключать пространство имен System.Windows.Forms в инструкции using, а использовать полное имя требуемых классов Windows Forms, что мы и сделали. Это нужно для того, чтобы избежать конфликта имен, поскольку в библиотеках разных технологий встречаются типы с одинаковыми именами, например, Color, Pen, Brush.


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

mylektsii.su - Мои Лекции - 2015-2024 год. (0.01 сек.)Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав Пожаловаться на материал