Язык программирования C#9 и платформа .NET5
Шрифт:
Понадобится наполнить коллекцию
CommandBindings
, поддерживаемую окном. В разметке XAML потребуется применить синтаксис "свойство-элемент" для определения области Window.CommandBindings
, в которую помещаются два определения CommandBinding
. Модифицируйте определение Window
, как показано ниже:
<Window x:Class="MyWordPad.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MySpellChecker" Height="331" Width="508"
WindowStartupLocation ="CenterScreen" >
<!--
Это информирует элемент управления Window о том, какие
обработчики вызывать при поступлении команд Open и Save -->
<Window.CommandBindings>
<CommandBinding Command="ApplicationCommands.Open"
Executed="OpenCmdExecuted"
CanExecute="OpenCmdCanExecute"/>
<CommandBinding Command="ApplicationCommands.Save"
Executed="SaveCmdExecuted"
CanExecute="SaveCmdCanExecute"/>
</Window.CommandBindings>
<!-- Эта панель устанавливает содержимое окна -->
<DockPanel>
...
</DockPanel>
</Window>
Щелкните правой кнопкой мыши на каждом из атрибутов
Executed
и CanExecute
в редакторе XAML и выберите в контекстном меню пункт Navigate to Event Handler (Перейти к обработчику события). Как объяснялось в главе 24, в результате автоматически сгенерируется заготовка кода для обработчика события. Теперь в файле кода C# для окна должны присутствовать четыре пустых обработчика событий. Реализация обработчиков события
CanExecute
будет сообщать окну, что можно инициировать соответствующие события Executed
в любой момент, для чего свойство CanExecute
входного объекта CanExecuteRoutedEventArgs
устанавливается в true
:
private void OpenCmdCanExecute(object sender, CanExecuteRoutedEventArgs e)
{
e.CanExecute = true;
}
private void SaveCmdCanExecute(object sender, CanExecuteRoutedEventArgs e)
{
e.CanExecute = true;
}
Обработчики соответствующего события
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. Понятие маршрутизируемых событий
Вы могли заметить, что в предыдущем примере кода передавался параметр
RoutedEventArgs
, а не EventArgs
. Модель маршрутизируемых событий является усовершенствованием стандартной модели событий CLR и спроектирована для того, чтобы обеспечить возможность обработки событий в манере, подходящей описанию XAML дерева объектов. Предположим, что имеется новый проект приложения WPF по имени WpfRoutedEvents
. Модифицируйте описание XAML начального окна, добавив следующий элемент управления Button
, который определяет сложное содержимое:
Поделиться:
Популярные книги
Адвокат вольного города
1. Адвокат
Фантастика:
городское фэнтези
альтернативная история
аниме
5.00
рейтинг книги
Темный Лекарь 4
4. Темный Лекарь
Фантастика:
фэнтези
аниме
5.00
рейтинг книги
Дракон - не подарок
2. Королевская академия Драко
Фантастика:
фэнтези
6.74
рейтинг книги
Разбуди меня
7. Серьёзные мальчики в форме
Любовные романы:
современные любовные романы
остросюжетные любовные романы
5.00
рейтинг книги
Изгой Проклятого Клана. Том 2
2. Изгой
Фантастика:
попаданцы
аниме
фэнтези
фантастика: прочее
5.00
рейтинг книги
Провинциал. Книга 2
2. Провинциал
Фантастика:
космическая фантастика
рпг
аниме
5.00
рейтинг книги
На границе империй. Том 10. Часть 3
Вселенная EVE Online
Фантастика:
боевая фантастика
космическая фантастика
попаданцы
5.00
рейтинг книги
Сумеречный Стрелок 2
2. Сумеречный стрелок
Фантастика:
городское фэнтези
попаданцы
аниме
5.00
рейтинг книги
Академия
2. Клан Волка
Фантастика:
боевая фантастика
5.40
рейтинг книги
Попаданка для Дракона, или Жена любой ценой
Любовные романы:
любовно-фантастические романы
7.17
рейтинг книги
Жена фаворита королевы. Посмешище двора
Фантастика:
фэнтези
5.00
рейтинг книги
Сердце Дракона. Том 12
12. Сердце дракона
Фантастика:
фэнтези
героическая фантастика
боевая фантастика
7.29
рейтинг книги
Архонт
5. Стеллар
Фантастика:
боевая фантастика
рпг
7.80
рейтинг книги
Лучший из худших
1. Лучший из худших
Фантастика:
фэнтези
попаданцы
5.25