Читаем Язык программирования C#9 и платформа .NET5 полностью

Обработчики соответствующего события Executed выполняют действительную работу по отображению диалоговых окон открытия и сохранения файла; они также отправляют данные из TextBox в файл. Начните с импортирования пространств имен System.IO и Microsoft.Win32 в файл кода. Окончательный код прямолинеен:

private void OpenCmdExecuted(object sender, ExecutedRoutedEventArgs e)

{

  // Создать диалоговое окно открытия файла и показать

  // в нем только текстовые файлы.

  var openDlg = new OpenFileDialog { Filter = "Text Files |*.txt"};

  // Был ли совершен щелчок на кнопке ОК?

  if (true == openDlg.ShowDialog())

  {

    // Загрузить содержимое выбранного файла.

    string dataFromFile = File.ReadAllText(openDlg.FileName);

    // Отобразить строку в TextBox.

    txtData.Text = dataFromFile;

  }

}

private void SaveCmdExecuted(object sender, ExecutedRoutedEventArgs e)

{

  var saveDlg = new SaveFileDialog { Filter = "Text Files |*.txt"};

  // Был ли совершен щелчок на кнопке ОК?

  if (true == saveDlg.ShowDialog())

  {

    // Сохранить данные из TextBox в указанном файле.

    File.WriteAllText(saveDlg.FileName, txtData.Text);

  }

}

На заметку! Система команд WPF более подробно рассматривается в главе 28, где будут создаваться специальные команды на основе ICommand и RelayCommands.

Итак, пример и начальное знакомство с элементами управления WPF завершены. Вы узнали, как работать с базовыми командами, системами меню, строками состояния, панелями инструментов, вложенными панелями и несколькими основными элементами пользовательского интерфейса (вроде TextBox и Expander). В следующем примере вы будете иметь дело с более экзотическими элементами управления, а также с рядом важных служб WPF.

<p id="AutBody_Root1140"><strong>Понятие маршрутизируемых событий</strong></p>

Вы могли заметить, что в предыдущем примере кода передавался параметр RoutedEventArgs, а не EventArgs. Модель маршрутизируемых событий является усовершенствованием стандартной модели событий CLR и спроектирована для того, чтобы обеспечить возможность обработки событий в манере, подходящей описанию XAML дерева объектов. Предположим, что имеется новый проект приложения WPF по имени WpfRoutedEvents. Модифицируйте описание XAML начального окна, добавив следующий элемент управления Button, который определяет сложное содержимое:

 

   

        Click ="btnClickMe_Clicked">

     

       

          Fancy Button!

       

         

              Height ="25" Width ="50" Cursor="Hand"

              Canvas.Left="25" Canvas.Top="12"/>

         

              Height = "15" Width ="36"

              Canvas.Top="17" Canvas.Left="32"/>

       

     

   

 

Обратите внимание, что в открывающем определении элемента Button было обработано событие Click за счет указания имени метода, который должен вызываться при возникновении события. Событие Click работает с делегатом RoutedEventHandler, который ожидает обработчик события, принимающий object в первом параметре и System.Winodws.RoutedEventArgs во втором. Реализуйте такой обработчик:

public void btnClickMe_Clicked(object sender, RoutedEventArgs e)

{

  // Делать что-нибудь, когда на кнопке произведен щелчок.

  MessageBox.Show("Clicked the button");

}

После запуска приложения окно сообщения будет отображаться независимо от того, на какой части содержимого кнопки был выполнен щелчок (зеленый элемент Ellipse, желтый элемент Ellipse, элемент Label или поверхность элемента Button). В принципе это хорошо. Только представьте, насколько громоздким оказалась бы обработка событий WPF, если бы пришлось обрабатывать событие Click для каждого из упомянутых подэлементов. Дело не только в том, что создание отдельных обработчиков событий для каждого аспекта Button — трудоемкая задача, а еще и в том, что в результате получился бы сложный в сопровождении код.

Перейти на страницу:

Похожие книги

1С: Бухгалтерия 8 с нуля
1С: Бухгалтерия 8 с нуля

Книга содержит полное описание приемов и методов работы с программой 1С:Бухгалтерия 8. Рассматривается автоматизация всех основных участков бухгалтерии: учет наличных и безналичных денежных средств, основных средств и НМА, прихода и расхода товарно-материальных ценностей, зарплаты, производства. Описано, как вводить исходные данные, заполнять справочники и каталоги, работать с первичными документами, проводить их по учету, формировать разнообразные отчеты, выводить данные на печать, настраивать программу и использовать ее сервисные функции. Каждый урок содержит подробное описание рассматриваемой темы с детальным разбором и иллюстрированием всех этапов.Для широкого круга пользователей.

Алексей Анатольевич Гладкий

Программирование, программы, базы данных / Программное обеспечение / Бухучет и аудит / Финансы и бизнес / Книги по IT / Словари и Энциклопедии
1С: Управление торговлей 8.2
1С: Управление торговлей 8.2

Современные торговые предприятия предлагают своим клиентам широчайший ассортимент товаров, который исчисляется тысячами и десятками тысяч наименований. Причем многие позиции могут реализовываться на разных условиях: предоплата, отсрочка платежи, скидка, наценка, объем партии, и т.д. Клиенты зачастую делятся на категории – VIP-клиент, обычный клиент, постоянный клиент, мелкооптовый клиент, и т.д. Товарные позиции могут комплектоваться и разукомплектовываться, многие товары подлежат обязательной сертификации и гигиеническим исследованиям, некондиционные позиции необходимо списывать, на складах периодически должна проводиться инвентаризация, каждая компания должна иметь свою маркетинговую политику и т.д., вообщем – современное торговое предприятие представляет живой организм, находящийся в постоянном движении.Очевидно, что вся эта кипучая деятельность требует автоматизации. Для решения этой задачи существуют специальные программные средства, и в этой книге мы познакомим вам с самым популярным продуктом, предназначенным для автоматизации деятельности торгового предприятия – «1С Управление торговлей», которое реализовано на новейшей технологической платформе версии 1С 8.2.

Алексей Анатольевич Гладкий

Финансы / Программирование, программы, базы данных