Инфраструктура WPF поддерживает отдельную разновидность свойств .NET под названием DependencyObject
. Несмотря на то что свойства зависимости являются ключевым аспектом разработки WPF, большую часть времени их детали скрыты от глаз. В главе 25 мы рассмотрим свойства зависимости более подробно.
Роль класса System.Windows.Threading.DispatcherObject
Последним базовым классом для типа Window
(помимо System.Object
, который здесь не требует дополнительных пояснений) является DispatherObject
. В нем определено одно интересное свойство Dispatcher
, которое возвращает ассоциированный объект System.Windows.Threading.Dispatcher
. Класс Dispatcher
— это точка входа в очередь событий приложения WPF, и он предоставляет базовые конструкции для организации параллелизма и многопоточности. Объект Dispatcher
обсуждался в главе 15.
Синтаксис XAML для WPF
Приложения WPF производственного уровня обычно будут использовать отдельные инструменты для генерации необходимой разметки XAML. Как бы ни были удобны такие инструменты, важно понимать общую структуру языка XAML. Для содействия процессу изучения доступен популярный (и бесплатный) инструмент, который позволяет легко экспериментировать с XAML.
Введение в Kaxaml
Когда вы только приступаете к изучению грамматики XAML, может оказаться удобным в применении бесплатный инструмент под названием https://github.com/punker76/kaxaml
.
На заметку! Во многих предшествующих изданиях книги мы направляли читателей на веб-сайт www.kaxaml.com
, но, к сожалению, он прекратил свою работу. Ян Каргер (https://github.com/punker76
) сделал ответвление от старого кода и потрудился над его улучшением. Его версия инструмента доступна в GitHub по ссылке https://github.com/punker76/kaxaml/releases
. Стоит выразить благодарность создателям за великолепный инструмент Kaxaml и Яну за то, что он сохранил его; Kaxaml помог многочисленным разработчикам изучить XAML.
Редактор Kaxaml полезен тем, что не имеет никакого понятия об исходном коде С#, обработчиках ошибок или логике реализации. Он предлагает намного более прямолинейный способ тестирования фрагментов XAML, нежели использование полноценного шаблона проекта WPF в Visual Studio. К тому же Kaxaml обладает набором интегрированных инструментов, в том числе средством выбора цвета, диспетчером фрагментов XAML и даже средством "очистки XAML", которое форматирует разметку XAML на основе заданных настроек. Открыв Kaxaml в первый раз, вы найдете в нем простую разметку для элемента управления
:
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
Подобно объекту Window
объект Page
содержит разнообразные диспетчеры компоновки и элементы управления. Тем не менее, в отличие от Window
объекты Page
не могут запускаться как отдельные сущности. Взамен они должны помещаться внутрь подходящего хоста, такого как NavigationWindow
или Frame
. Хорошая новость в том, что в элементах
и
можно вводить идентичную разметку.
На заметку! Если в окне разметки Kaxaml заменить элементы
и элементами
и , тогда можно нажать клавишу <F5> и отобразить на экране новое окно.
В качестве начального теста введите следующую разметку в панели XAML, находящейся в нижней части окна Kaxaml:
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
В верхней части окна Kaxaml появится визуализированная страница (рис. 24.2).
Во время работы с Kaxaml помните, что данный инструмент не позволяет писать разметку, которая влечет за собой любую компиляцию кода (но разрешено использовать х:Name
). Сюда входит определение атрибута х:Class
(для указания файла кода), ввод имен обработчиков событий в разметке или применение любых ключевых слов XAML, которые также предусматривают компиляцию кода (вроде FieldModifier
или ClassModifier
). Попытка поступить так приводит к ошибке разметки.
Пространства имен XML и "ключевые слова" XAML