Ласкаво просимо до dev.net.ua Увійти | Приєднатися | Допомога

Близкий взгляд на WPF. Часть 1. Знакомство с XAML

Использование XAML(читается «замл») является основным способом декларативного программирования в среде WPF. Вот небольшой пример кода XAML, который используется для определения окна с текстом и кнопкой, визуально «прилепленными» к друг другу.

На рисунке показаны основные элементы этого простого примера. Весь документ занимает тэг Window, который декларативно определяет окно, его свойства и содержимое. Атрибут (1) задает имя так называемого Code-behind класса, то есть класса, который будет содержать процедурную программную логику для данной разметки. Понятие Code-behind классов позаимствовано из ASP.NET, где оно имеет практически ту же семантику и широко используется. Code-behind класс для данной разметки мы рассмотрим здесь чуть позже.

Атрибуты (2) содержат описания того, какие XML-пространства имен используются в данном документе. Те два пространства имен, которые мы видим на рисунке, используются в WPF практически всегда; их использование учтено в шаблонах для создания соответствующих элементов проектов Visual Studio. Первое пространство имен содержит описание стандартных элементов WPF и используется по-умолчанию, второе – описание специальных расширений XAML и по соглашению имеет псевдоним x. Также XAML предлагает специальный синтаксис для подключения пространств имен .NET; это выглядит следующим образом:

Как видно, для того, чтобы подключить CLR-пространство имен к вашему документу, необходимо назначить ему псевдоним, указать собственно его имя и имя сборки. Насколько я знаю, для того чтобы это работало, ссылка на эту сборку должна быть добавлена в проект. Для того чтобы добавить ссылку на пространство имен из текущей сборки, нужно просто опустить часть «;assembly=XXX».

Атрибуты (3) содержат описание некоторых свойств окна; здесь это заголовок, ширина и высота. Здесь все довольно просто.

Далее находятся тэги, которые описывают содержимое окна. Непосредственным логическим «ребенком» окна является панель типа StackPanel (4), которая используется для обеспечения последовательного горизонтального (как в данном случае) или вертикального размещения дочерних элементов.

В эту панель вложены два стандартных элемента управления: текстовый блок (5) и кнопка (6). Описание кнопки задает ее имя (которое будет доступно как имя члена класса типа Button из Code-behind класса) и подразумевает наличие обработчика события Click (7) также в этом процедурно описанном классе.

Прежде чем мы перейдем к рассмотрению code-behind класса, хочу сказать, что мне очень нравится возможность задавать имена только для тех элементов, для которых они нужны (как в случае с кнопкой). Известно, что в Windows Forms ситуация сложилась по другому – даже для самого незначительных сплиттера и панели нужно задавать имена и чаще всего они имеют вид вроде splitter1; затем, как показывает практика, разработчики привыкают к этому и начинают давать такие «безымянные» имена даже значимым элементам. Здесь же легко применить всегда полезный принцип – если надо что-то назвать – подумай и назови хорошо, а если не надо – то и не беспокойся.

На рисунке выше показан вид code-behind класса для описанной разметки. Выглядит очень похоже на описание такого же класса для Windows Forms – все очень просто. Впрочем, так и должно быть.

Кстати, у нас есть возможность выразить то, что мы сделали при помощи XAML, на C#. Если посмотреть на такой код (он будет похож на сериализованный код дизайнера Windows Forms), то он будет в полтора-два раза объемнее чем XAML, а элегантность и лаконичность не стоит даже и сравнивать.

Опубліковані Wednesday, October 18, 2006 6:09 PM від EugeneZ
Помічено як:

Коментарі

# re: Близкий взгляд на WPF. Часть 1. Знакомство с XAML

У меня есть вопрос по code-behind классам. Интересует меня, как такие классы связаны с XAML-разметкой? Правильно ли я понимаю, что XAML-разметка и соответствующий code-behind класс при компиляции "сливаются" в один класс? Если так, то непонятно зачем в обоих задается указание наследования от Window - избыточность? Или все же они являются разными классами? Ну и по поводу XAML-разметки: является ли XAML-код интерпретируемым или компилируется в обычный CLP-байткод?

Saturday, January 06, 2007 1:41 AM by Constantiner

# re: Близкий взгляд на WPF. Часть 1. Знакомство с XAML

Здравствуйте.

Две части класса (markup и code) "сливаются" при помощи механизма partial classes. Насчет избыточности указания наследования ничего сказать не могу (могу сказать только то, что я от этого не страдаю).

XAML обычно компилируется в IL. Кроме того, любой XAML - код может при необходимости "интерпретироватся" по запросу прикладного программиста для решения задач времени выполнения.

Sunday, January 21, 2007 6:24 AM by EugeneZ
Анонімні коментарі деактивовані. Увійдіть або Зареєструйтесь щоб мати доступ до ресурсів Спільноти.