Книжная полка Сохранить
Размер шрифта:
А
А
А
|  Шрифт:
Arial
Times
|  Интервал:
Стандартный
Средний
Большой
|  Цвет сайта:
Ц
Ц
Ц
Ц
Ц

Разработка пользовательского интерфейса на основе технологии Windows Presentation Foundation

Покупка
Основная коллекция
Артикул: 708265.01.99
Доступ онлайн
361 ₽
В корзину
В учебнике рассмотрены основные приемы разработки пользовательского интерфейса на основе технологии Windows Presentation Foundation (WPF). входящей в состав платформы .NET. начиная с версии 3.0. Учебный материал излагается в форме подробного описания 19 проектов для среды программирования Microsoft Visual Studio 2015. демонстрирующих различные аспекты технологии WPF. Описание проектов сопровождается многочисленными комментариями. Завершающий раздел содержит 48 учебных заданий, предназначенных для закрепления изученного материала. Для студентов бакалавриата, обучающихся по направлению подготовки 02.03.02 «Фундаментальная информатика и информационные технологии».
Абрамян, А. В. Разработка пользовательского интерфейса на основе системы Windows Presentation Foundation : учебник / А. В. Абрамян. М. Э. Абрамян ; Южный федеральный университет. — Ростов-на-Дону ; Таганрог : Издательство Южного федерального университета, 2017. — 301 с. - ISBN 978-5-9275-2375-7. - Текст : электронный. - URL: https://znanium.com/catalog/product/1020507 (дата обращения: 16.05.2024). – Режим доступа: по подписке.
Фрагмент текстового слоя документа размещен для индексирующих роботов. Для полноценной работы с документом, пожалуйста, перейдите в ридер.
 
 

 

МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ  
РОССИЙСКОЙ ФЕДЕРАЦИИ  
Федеральное государственное автономное  
образовательное учреждение высшего образования 
«ЮЖНЫЙ ФЕДЕРАЛЬНЫЙ УНИВЕРСИТЕТ» 
 
 
 
А. В. Абрамян, М. Э. Абрамян 

 
 
Разработка пользовательского  
интерфейса на основе технологии  
Windows Presentation Foundation 

 
 
Учебник  
 
по курсу «Основы разработки  
пользовательского интерфейса»  
для студентов направления  
02.03.02 «Фундаментальная информатика  
и информационные технологии» (бакалавриат)  

 
 
 
 
Ростов-на-Дону – Таганрог 
Издательство Южного федерального университета 
2017 

УДК [004.4:004.51](075.8) 
ББК  32.973я73 
         А164 
 
Печатается по решению учебно-методической комиссии  
Института математики, механики и компьютерных наук  
им. И. И. Воровича Южного федерального университета  
(протокол № 4 от 14 апреля 2017 г.) 
 
Рецензенты: 
профессор кафедры «Информатика» Ростовского государственного  
университета путей сообщения (РГУПС), доктор технических наук 
М. А. Бутакова; 

 
доцент кафедры алгебры и дискретной математики  
Института математики, механики и компьютерных наук им. И. И. Воровича 
Южного федерального университета, кандидат физико-математических наук  
С. С. Михалкович 
 
Абрамян, А. В. 
А164  
Разработка пользовательского интерфейса на основе системы 
Windows Presentation Foundation : учебник / А. В. Абрамян,  
М. Э. Абрамян ; Южный федеральный университет. — Ростов-наДону 
; 
Таганрог 
: 
Издательство 
Южного 
федерального 
университета, 2017. — 301 с. 
 
 
ISBN  978-5-9275-2375-7 
 
В учебнике рассмотрены основные приемы разработки пользовательского 
интерфейса на основе технологии Windows Presentation Foundation (WPF), входящей в 
состав платформы .NET, начиная с версии 3.0. Учебный материал излагается в форме 
подробного описания 19 проектов для среды программирования Microsoft Visual Studio 
2015, демонстрирующих различные аспекты технологии WPF. Описание проектов 
сопровождается многочисленными комментариями. Завершающий раздел содержит 48 
учебных заданий, предназначенных для закрепления изученного материала. 
Для студентов бакалавриата, обучающихся по направлению подготовки 
02.03.02 «Фундаментальная информатика и информационные технологии». 
 
УДК [004.4:004.51](075.8) 
ББК 32.973я73 
 
ISBN  978-5-9275-2375-7 
© Южный федеральный университет, 2017 
 
© Абрамян А. В., Абрамян М. Э., 2017 

Оглавление

Предисловие.........................................................................................................7
1. События: EVENTS.......................................................................................11

1.1. Создание проекта для WPF-приложения.............................................11
1.2. Добавление компонентов и настройка их свойств .............................17
1.3. Связывание события с обработчиком ..................................................23
1.4. Отсоединение обработчика от события ...............................................26
1.5. Присоединение к событию другого обработчика...............................29

2. Работа с несколькими окнами: WINDOWS..............................................33

2.1. Настройка визуальных свойств окон. Открытие 

окон в обычном и диалоговом режиме ..............................................33

2.2. Решение проблем, возникающих при повтором открытии 

подчиненных окон................................................................................37

2.3. Контроль за состоянием подчиненного окна. 

Воздействие подчиненного окна на главное .....................................38

2.4. Окно с содержимым в виде обычного текста......................................39
2.5. Модальные и обычные кнопки диалогового окна ..............................40
2.6. Установка активного компонента окна. Особенности работы 

с фокусом в библиотеке WPF..............................................................45

2.7. Запрос на подтверждение закрытия окна.............................................46

3. Совместное использование обработчиков событий 

и работа с клавиатурой: CALC...................................................................49

3.1. Настройка коллективного обработчика событий................................49
3.2. Организация вычислений ......................................................................52
3.3. Простейшие приемы ускорения работы 

с помощью клавиатуры........................................................................54

3.4. Использование обработчика событий от клавиатуры ........................56
3.5. Контроль за изменением исходных данных ........................................59

4. Работа с датами и временем: CLOCK .......................................................62

4.1. Отображение текущего времени...........................................................62
4.2. Реализация возможностей секундомера ..............................................65
4.3. Альтернативные варианты выполнения команд 

с помощью мыши .................................................................................70

4.4. Отображение текущего состояния часов и секундомера 

на панели задач.....................................................................................71

5. Поля ввода: TEXTBOXES.......................................................................... 73

5.1. Дополнительное выделение активного поля ввода............................ 73
5.2. Управление порядком обхода полей на форме................................... 77
5.3. Проверка правильности введенных данных ....................................... 81
5.4. Блокировка окна с ошибочными данными.......................................... 83

6. Обработка событий от мыши: MOUSE .................................................... 85

6.1. Перетаскивание панели с помощью мыши......................................... 85
6.2. Изменение размеров компонента с помощью мыши. 

Захват мыши и его особенности......................................................... 89

6.3. Использование дополнительных курсоров ......................................... 91
6.4. Обработка ситуации с одновременным нажатием 

двух кнопок мыши............................................................................... 92

6.5. Перетаскивание компонентов любого типа........................................ 94

7. Перетаскивание (Drag & Drop): ZOO........................................................ 96

7.1. Перетаскивание меток в окне ............................................................... 96
7.2. Перетаскивание меток в поля ввода .................................................. 101
7.3. Взаимодействие меток при их перетаскивании друг на друга........ 104
7.4. Действия в случае перетаскивания 

на недопустимый приемник.............................................................. 106

7.5. Дополнительное выделение источника и приемника 

в ходе перетаскивания....................................................................... 107

7.6. Настройка вида курсора в режиме перетаскивания ......................... 109
7.7. Информация о текущем состоянии программы. 

Кнопки с комбинированным содержимым ..................................... 110

7.8. Восстановление исходного состояния............................................... 111

8. Курсоры и иконки: CURSORS................................................................. 113

8.1. Использование стандартных курсоров.............................................. 113
8.2. Установка курсора для окна и приложения в целом........................ 116
8.3. Использование в программе дополнительных курсоров................. 117
8.4. Работа с иконками................................................................................ 119
8.5. Размещение иконки в области уведомлений. 

Использование объектов из библиотеки Windows Forms.............. 120

9. Меню и работа с текстовыми файлами: TEXTEDIT, версия 1 ............ 123

9.1. Создание меню..................................................................................... 123
9.2. Команды WPF и связывание с ними пунктов меню......................... 125
9.3. Сохранение текста в файле ................................................................. 129
9.4. Очистка области редактирования и открытие нового файла .......... 133
9.5. Контроль за сохранением изменений, внесенных в текст............... 135
9.6. Проверка доступности команд WPF.................................................. 138

10. Дополнительные возможности меню, настройка шрифта, 

выравнивания и цвета: TEXTEDIT, версия 2......................................... 139

10.1. Установка начертания символов. Команды меню – флажки ........ 139

10.2. Установка выравнивания текста. Команды меню –

радиокнопки........................................................................................142

10.3. Установка цвета символов и фона. Определение новых 

команд WPF и использование диалогового окна 
из библиотеки Windows Forms..........................................................144

11. Команды редактирования и контекстное меню: 

TEXTEDIT, версия 3 .................................................................................149

11.1. Команды редактирования..................................................................149
11.2. Создание контекстного меню............................................................153

12. Панель инструментов: TEXTEDIT, версия 4..........................................155

12.1. Создание панели инструментов. Добавление изображений 

к пунктам меню...................................................................................155

12.2. Использование независимых кнопок-переключателей..................161
12.3. Использование зависимых кнопок-переключателей. 

Привязка свойств................................................................................163

13. Статусная панель и дополнительные возможности привязки: 

TXTEDIT, версия 5....................................................................................167

13.1. Использование статусной панели. Определение свойств 

зависимости. Привязка данных с использованием 
конвертеров типов..............................................................................167

13.2. Скрытие панелей: два варианта реализации....................................171
13.3. Дополнение. Реализация команд-переключателей 

без использования обработчиков событий ......................................173

14. Цвета: COLORS .........................................................................................178

14.1. Начальная настройка макета окна ....................................................178
14.2. Определение цвета с использованием ползунков 

как комбинации трех основных цветов и альфасоставляющей .....................................................................................181

14.3. Инвертирование цветов и вывод цветовых констант.....................183
14.4. Отображение оттенков серого цвета ................................................184
14.5. Вывод цветовых имен ........................................................................186
14.6. Связывание компонентов с метками-подписями............................187

15. Выпадающие и обычные списки: LISTBOXES......................................189

15.1. Создание и использование выпадающих списков ..........................189
15.2. Список: добавление и удаление элементов .....................................194
15.3. Дополнительные операции для элементов списка. 

Использование стилей в xaml-файле................................................199

15.4. Выполнение операций над списком с помощью мыши .................204

16. Флажки и группы флажков: CHECKBOXES..........................................209

16.1. Установка флажков и контроль за их состоянием..........................209
16.2. «Глобальная» установка флажков и использование флажков, 

принимающих три состояния............................................................219

17. Просмотр изображений: IMGVIEW........................................................ 222

17.1. Иерархический список каталогов..................................................... 222
17.2. Список файлов. Компоненты-разделители ..................................... 229
17.3. Компоненты для просмотра изображений и прокрутки 

содержимого....................................................................................... 234

17.4. Масштабирование изображений ...................................................... 238
17.5. Сохранение в реестре Windows информации 

о состоянии программы..................................................................... 243

17.6. Восстановление из реестра Windows информации 

о состоянии программы..................................................................... 246

18. Табличное приложение с заставкой: TRIGFUNC.................................. 249

18.1. Формирование таблицы значений тригонометрических 

функций............................................................................................... 249

18.2. Отображение окна-заставки при загрузке программы................... 256
18.3. Отображение индикатора прогресса 

при загрузке программы.................................................................... 261

19. Создание компонентов во время выполнения программы: 

HTOWERS ................................................................................................. 264

19.1. Настройка начальной позиции ......................................................... 264
19.2. Перетаскивание блоков на новое место .......................................... 268
19.3. Восстановление начальной позиции, подсчет числа 

перемещений блоков и контроль за решением задачи .................. 271

19.4. Демонстрационное решение задачи................................................. 273

20. Учебные задания....................................................................................... 276

20.1. Проект DIALOGS: взаимодействие между окнами ....................... 276
20.2. Проект SYNC: синхронизация компонентов.................................. 279
20.3. Проект DRAGDROP: режим Drag & Drop ...................................... 282
20.4. Проект TIMER: программы, управляемые таймером .................... 285
20.5. Проект REGISTRY: диалоги и работа с реестром.......................... 289

Литература....................................................................................................... 294
Указатель.......................................................................................................... 295

Предисловие

Книга знакомит читателя с основными приемами разработки пользо
вательского интерфейса на основе системы Windows Presentation 
Foundation (WPF), входящей в платформу .NET, начиная с версии 3.0. Данная система была создана с целью снять ряд серьезных ограничений, 
имевшихся у ее предшественницы – системы разработки интерфейса 
Windows Forms, изначально входившей в состав платформы .NET. При 
этом наряду с сохранением концепций, лежащих в основе Windows Forms 
(в частности, механизма обработки событий), система WPF была дополнена новыми технологиями, позволяющими разрабатывать интерфейсы, 
имеющие существенно более широкие графические возможности и, что не 
менее важно в современном мире планшетов и смартфонов, допускающими автоматическую адаптацию к особенностям устройств, на которых запущено приложение.

Новой важной чертой системы WPF для разработчиков приложений 

стало явное разграничение программного кода и макета приложения, которое было обеспечено включением в состав проекта XML-файлов, позволяющих описывать визуальный интерфейс на особом декларативном языке 
разметки XAML (eXtensible Application Markup Language). Следует отметить, что в настоящее время подобный подход реализован в большинстве 
систем разработки интерфейсов.

Разработчики приложений на основе технологии WPF получили в свое 

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

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

Не последнее место в списке преимуществ технологии WPF занимает 

удобство разработки WPF-приложений, которое обеспечивается средства
ми среды программирования Microsoft Visual Studio (версии 2008–2015). 
Традиционные методы визуальной разработки интерфейса, имевшиеся уже 
в технологии Windows Forms, были дополнены методами, основанными 
на непосредственном редактировании xaml-файлов, определяющих макет 
графического приложения. Подобное редактирование (как и редактирование программного кода) существенно упрощается благодаря контекстным 
подсказкам, автоматической проверке синтаксиса, средствам автозавершения и другим средствам, встроенным в редакторы кода и xaml-файлов. 

Учитывая перечисленные выше особенности системы WPF и прини
мая во внимание широкую распространенность технологий и языков программирования, основанных на платформе .NET, представляется вполне 
оправданным применение данной системы в качестве базовой при изучении приемов и методов разработки пользовательского интерфейса в рамках соответствующего университетского курса. 

При этом, однако, возникают две проблемы. Первая обусловлена 

сложностью системы WPF и обширностью ее средств, которые невозможно охватить в рамках одного курса. Вторая проблема связана с недостатком учебной литературы. Если ограничиться изданиями, переведенными 
на русский язык, то можно отметить лишь [7–9] (при включении 
в рассмотрение английских книг их общее количество увеличится лишь 
в 2–3 раза). Из этих изданий на роль учебника может отчасти претендовать 
только книга Чарльза Петцольда [7], написанная с большим методическим 
мастерством (что характерно для всех работ этого автора) и содержащая 
много примеров законченных программ. Две другие книги являются, скорее, справочниками, включающими небольшие фрагменты иллюстративного кода. 

Предлагаемая книга представляет собой попытку решения обеих про
блем. С одной стороны, она посвящена лишь основным возможностям 
технологии WPF, которые вполне можно освоить за семестровый курс, 
а с другой – излагает материал в «практической» форме, упрощающей его 
усвоение. Изложение построено в виде подробного описания ряда законченных программных проектов, каждый из которых посвящен одному 
из аспектов технологии WPF. Многочисленные комментарии содержат дополнительные сведения, связанные с изучаемыми возможностями. Во многих случаях приводится сравнение рассматриваемых средств WPF с аналогичными средствами библиотеки Windows Forms. В процессе разработки 
проектов авторы намеренно допускают типичные ошибки, характерные 
для начинающих разработчиков интерфейсов, подробно объясняют их 
причины и приводят способы исправления. Подобный вариант изложения 
учебного материала «на примерах» ранее с успехом применялся авторами 
при чтении ими курсов по разработке пользовательских интерфейсов с использованием библиотеки VCL системы программирования Borland Delphi 

[1, 2] и предшественницы WPF – библиотеки Windows Forms платформы 
.NET [3]. 

Учебник состоит из описаний 19 проектов. Его содержимое можно 

разбить на три части. В первой части рассматриваются базовые возможности библиотеки WPF: создание проекта для WPF-приложения, работа 
с xaml-файлами, использование группирующих компонентов, управление 
программой посредством обработчиков событий (проект EVENTS), приемы работы с окнами в WPF-приложении, организация взаимодействия между окнами, особенности диалоговых окон (проект WINDOWS), совместное использование обработчиков событий, события клавиатуры (проект 
CALC), таймеры в WPF-приложении (проект CLOCK), возможности полей 
ввода, организация проверки правильности введенных данных (проект 
TEXTBOXES), события мыши (проект MOUSE), механизм перетаскивания 
Drag & Drop (проект ZOO), работа с курсорами и иконками, создание ресурсов приложения, совместное использование средств WPF и Windows 
Forms (проект CURSORS).

Вторая часть содержит описание разработки одного большого проекта 

TEXTEDIT, разбитое на 5 этапов (версий проекта). В ней основное внимание уделяется особенностям тех стандартных интерфейсных элементов, 
без которых не обходится практически ни одно приложение: меню и различных видов его команд (версии 1 и 2), контекстных меню (версия 3), 
панели инструментов (версия 4), статусной панели (версия 5). Кроме того, 
в версии 1 подробно рассматриваются особенности организации работы 
с файлами (открытие, сохранение, контроль за сохранением внесенных изменений), а также описываются приемы работы с командами WPF; в версии 2 рассказывается о том, как создавать новые команды WPF; в версии 3 
рассматриваются особенности реализации команд редактирования; а в версиях 4 и 5 особое внимание уделяется различным аспектам механизма привязки компонентов и, кроме того, описываются действия по созданию новых свойств зависимости.

Третья часть содержит проекты, связанные с дополнительными воз
можностями WPF – работа с цветами и кистями и использование компонентов TrackBar (проект COLORS), работа со списками и использование 
стилей при определении макета приложения (проект LISTBOXES), работа 
с флажками и наборами флажков (проект CHECKBOXES), работа с иерархическими списками, реализация дерева каталогов и списка файлов, 
использование компонентов GridSplitter и Image, применение реестра 
Windows для хранения настроек приложения (проект IMGVIEW), работа 
с табличными списками и использование заставок и градиентных кистей 
(проект TRIGFUNC), создание компонентов во время выполнения программы (проект HTOWERS).

Завершает книгу раздел с 48 учебными заданиями, разбитыми 

на 5 групп. Каждая группа содержит однотипные задания; первая группа 
включает задания на организацию взаимодействия между окнами приложения, вторая – на синхронизацию компонентов и совместное использование обработчиков событий, третья – на реализацию режима перетаскивания Drag & Drop, четвертая – на создание программ, управляемых таймером, пятая – на использование стандартных диалоговых окон и работу 
с реестром. Большое количество заданий позволяет легко формировать 
из них наборы индивидуальных заданий одинакового уровня сложности.

За рамками настоящей книги осталось большинство возможностей 

библиотеки WPF, связанных с ее графической подсистемой, поскольку детальное изучение этих возможностей более естественно отнести к курсу по 
компьютерной графике. 

Предполагается, что читатель книги уже изучил базовый курс по про
граммированию. Знание основ языка C#, а также языка XML, является желательным, но не обязательным, так как ознакомиться с конструкциями 
этих языков можно в процессе чтения книги. Тем не менее полезной может 
оказаться книга [5], освещающая практически все аспекты языка C# 
и стандартных библиотек платформы .NET, а также книга [4], содержащая 
описание основных типов стандартной библиотеки (в том числе классов, 
связанных с обработкой строк и файлов), объектной модели языка C# 
и технологии LINQ, в том числе интерфейса LINQ to XML. 

В качестве среды программирования используется Microsoft Visual 

Studio 2015, однако все проекты можно реализовать и в более ранних версиях этой среды (начиная с версии 2008). Применение новых возможностей языка C#, появившихся в его версии 6.0 и доступных только в Visual 
Studio версий 2015 и выше, всегда особо отмечается и сопровождается альтернативными вариантами кода для предыдущих версий.

Соглашения по оформлению фрагментов программного кода и xaml
файлов приводятся в первом проекте EVENTS. В нем же описываются 
основные действия по созданию и редактированию проекта для WPFприложения. 

1.
События: EVENTS

Рис. 1. Окно приложения EVENTS

1.1. Создание проекта для WPF-приложения

Для того чтобы создать проект в среде программирования Visual 

Studio, выполните команду File | New | Project (Ctrl+Shift+N), в появившемся окне New Project выберите в левой части вариант Visual C#, а в правой 
части – вариант WPF Application, в поле ввода Name укажите имя проекта 
(в нашем случае EVENTS), а в поле ввода Location укажите каталог, в котором будет создан каталог проекта. Желательно снять флажок Create 
directory for solution, чтобы не создавался промежуточный каталог для решения (каталог для решения удобно использовать в ситуации, когда решение содержит несколько проектов; в нашем случае решение всегда будет 
содержать единственный проект). После указания всех настроек нажмите 
кнопку «OK». 

В результате будет создан каталог EVENTS, содержащий все файлы 

одноименного проекта, в том числе файл решения EVENTS.sln, файл проекта EVENTS.csproj, а также файлы для двух основных классов проекта, 
созданных автоматически: класса MainWindow, представляющего главное 
окно программы, и класса App, обеспечивающего запуск программы, в ходе которого создается и отображается на экране экземпляр главного окна. 

Для каждого класса создаются два файла: с расширением xaml, котрый 

содержит часть определения класса в специальном формате, и с расширением cs (перед которым тоже содержится текст xaml), содержащий часть 
определения класса на языке C#. Файл с расширением xaml (xaml-файл) 
имеет формат XML (eXtensible Markup Language – расширяемый язык разметки). Аббревиатура XAML (произносится «зэмл» или «замл») означает, 
что используется специализированный вариант языка XML: eXtensible 

Application Markup Language – расширяемый язык разметки для приложений. 

Приведем содержимое файлов, связанных с классом App и созданных 

в Visual Studio 2015.
App.xaml:

<Application x:Class="EVENTS.App"

xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:EVENTS"
StartupUri="MainWindow.xaml">

<Application.Resources>

</Application.Resources>

</Application>

App.xaml.cs:

using System;
using System.Collections.Generic;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Threading.Tasks;
using System.Windows;

namespace EVENTS
{

/// <summary>
/// Interaction logic for App.xaml
/// </summary>
public partial class App : Application
{
}

}
Анализ этих файлов показывает, что класс App наследуется от стан
дартного класса Application, а также что в cs-файле никакой новой функциональности в класс App не добавляется (обратите внимание на то, что 
при определении класса App в cs-файле указывается модификатор partial, 
означающий, что часть определения этого класса содержится в другом 
файле). Созданный класс (как и другие классы проекта, создаваемые автоматически) связывается с пространством имен EVENTS, совпадающим 
с именем проекта.

Перед анализом содержимого xaml-файла следует предварительно 

описать основные правила, по которым формируется любой XML-файл. 
Подобные файлы состоят из иерархического набора вложенных друг 
в друга именованных XML-элементов, причем каждый элемент может 
иметь любое количество XML-атрибутов и дочерних элементов. Элементы оформляются в виде тегов; открывающий тег элемента имеет вид 
<имя_элемента список_атрибутов>, а закрывающий тег – </имя_элемента>. Между этими тегами располагается содержимое элемента, которое 
может представлять собой обычный текст и/или другие (дочерние) элементы (а также другие XML-узлы, которые мы не будем обсуждать, так как 
в xaml-файле они не используются). Число уровней вложенности элементов может быть любым. Если элемент не имеет содержимого, то он может 
представляться в виде одного комбинированного тега вида <имя_элемента список_атрибутов />. Атрибуты в списке определяются следующим 
образом: имя_атрибута="значение_атрибута"; значение обязательно 
заключается в кавычки (одинарные или двойные). Все атрибуты одного 
элемента должны иметь различные имена, в то время как его дочерние 
элементы могут иметь совпадающие имена. Регистр в именах учитывается; 
имена как атрибутов, так и элементов могут содержать только буквы, цифры, символы «.» (точка), «-» (дефис) и «_» (подчеркивание) и начинаться 
либо с буквы, либо с символа подчеркивания. Пробелы в именах не допускаются. Перед именами элементов и атрибутов могут указываться префиксы пространств имен, отделяемые от собственно имени двоеточием 
(в файле App.xaml имеются два таких атрибута: xmlns:x и xmlns:local). 
Любой XML-файл должен содержать единственный XML-элемент верхнего уровня, называемый корневым элементом (в файле App.xaml это элемент Application).

В той части определения класса App, которая размещается в xaml
файле, содержится единственная, но очень важная настройка – указание 
на класс, экземпляр которого будет создан при запуске программы. Это атрибут StartupUri элемента Application, его значение равно MainWindow.xaml. Фактически данный атрибут является свойством класса 
Application. Как и другие свойства, его можно настроить либо непосредственно в тексте xaml-файла, либо в окне свойств Properties, которое отображает доступные для редактирования свойства текущего объекта из xamlфайла (если в редакторе отображается не xaml-, а cs-файл, то окно 
Properties является пустым). 

При указании или изменении свойств в xaml-файле  очень помогает 

предусмотренная в редакторе xaml-файлов возможность контекстной подсказки при выборе значений свойств. Окно Properties удобно в том отношении, что позволяет просмотреть все доступные свойства текущего объекта. В xaml-файле отображаются только те свойства, значения которых 

отличаются от значений по умолчанию для данного объекта. Чтобы добавить в xaml-файл новое свойство, достаточно в окне Properties указать для 
данного свойства значение, отличное от значения по умолчанию.

В процессе компиляции программы все xaml-файлы конвертируются 

в специальный двоичный формат и затем обрабатываются совместно с csфайлами проекта.

Класс App обычно не требуется редактировать. По этой причине после 

создания проекта в редактор не загружаются файлы, связанные с классом 
App.

Комментарий
На протяжении всей книги мы будем придерживаться следующих со
глашений об отступах в текстах xaml- и cs-файлов. В xaml-файле каждый 
вложенный элемент набирается с отступом в 2 пробела относительно родительского элемента (причина столь небольшого отступа заключается 
в том, что глубина вложенности элементов в xaml-файлах может быть 
достаточно большой); если список атрибутов в открывающем теге элемента не умещается в одной строке, то он переносится на следующую 
строку с отступом в 4 пробела относительно начала открывающего тега. 
Для cs-файла ситуация обратная: вложенные конструкции набираются 
с отступом в 4 пробела (как в редакторе кода среды Visual Studio), а при 
переносе длинного оператора на новую строку используется отступ 
в 2 пробела.

Приведем файлы, связанные с классом MainWindow; именно эти фай
лы автоматически загружаются в редактор после создания (или открытия) 
проекта.
MainWindow.xaml:

<Window x:Class="EVENTS.MainWindow"

xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:EVENTS"
mc:Ignorable="d"
Title="MainWindow" Height="350" Width="525">

<Grid>

</Grid>

</Window>

MainWindow.xaml.cs:

using System;
using System.Collections.Generic;
using System.Linq;

Доступ онлайн
361 ₽
В корзину