Главная » Silverlight » Основы XAML

0

Синтаксис XAML базируется на следующих общих правилах.

•       Каждый элемент документа XAML отображается на определенный экземпляр класса Silverlight. Имя элемента всегда точно совпадает с именем класса. Например, эле­мент <Button> вынуждает надстройку Silverlight создать объект Button (Кнопка).

•       Как и в любом документе XML, элементы XAML можно вкладывать друг в друга. Каждый класс XAML достаточно гибкий для обеспечения нужного поведения в каждой ситуации. Вложение элементов разметки обычно отображает вложен­ность элементов интерфейса. Например, если элемент <Button> расположен

в элементе <Grid>, то и в пользовательском интерфейсе кнопка Button включена в элемент Grid (Решетка).

• Свойства класса определяются с помощью атрибутов. Однако в некоторых ситуа­циях атрибутов для этого недостаточно. Тогда для определения дополнительных свойств класса используются специальные вложенные дескрипторы.

Совет. Если вы не знакомы с XML, то прежде, чем начать изучение XAML, рекомендую почитать бесплатный сетевой учебник www. w3schools . com/xml.

Рассмотрим пустой документ XAML, сгенерированный программой Visual Studio и представляющий чистую страницу. Номера строк добавлены для облегчения ссылки на строки, в реальном документе их не должно быть.

1    <UserControl x:Class="SilverlightApplicationl.MainPage"

2     xmlns="http: //schemas .microsoft. com/winfx/2006/"i>

xaml/presentation"

3     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

4     xmlns:d="http://schemas.microsoft.com/expression/4>

blend/2008"

5     xmlns:mc="http://schemas.openxmlformats.org/4>

markup-compatibility/2006"

6     mc:Ignorable="d" d:DesignWidth="640"

d:DesignHeight="480">

7       

8        <Grid x:Name="LayoutRoot">

9        </Grid>

10  </UserControl>

Документ содержит два элемента: элемент верхнего уровня вложенности UserControl (Пользовательский элемент управления), охватывающий все содержимое Silverlight, и элемент Grid, в котором можно размещать элементы интерфейса.

Как и в документах XML, в документе XAML может присутствовать только один эле­мент верхнего уровня вложенности. В данном примере это — элемент UserControl. Следовательно, документ должен завершаться закрывающим дескриптором </DserControl>, после которого не должно быть никакой разметки.

Пространства имен XAML

При наличии в файле XAML элемента <UserControl> синтаксический анализатор Silverlight воспринимает его как задание создать экземпляр класса UserControl. Однако он не знает, что это за класс. Ведь несмотря на то, что пространство имен Silverlight содержит только один класс UserControl, нет никакой гарантии того, что разработчик не создал пользовательский класс под таким же именем. Следовательно, чтобы был соз­дан нужный класс, необходим способ задания пространства имен.

В Silverlight классы разрешаются путем добавления пространств имен XML в простран­ства имен Silverlight. В приведенной выше разметке определены два пространства имен.

2     xmlns="http: //schemas .microsoft .com/winfx/2006/xaml/

presentation"

3     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

4     xmlns:d="http://schemas.microsoft.com/expression/

blend/2008"

5     xmlns: mc="http: / /schemas. openxmlformats. org/

markup-compatibility/2006"

Специальный атрибут xmlns зарезервирован в XML для объявления пространств имен. В приведенной выше разметке объявлены четыре пространства имен, исполь­зуемые на каждой странице, созданной с помощью Visual Studio или Expression Blend.

Примечание. Пространства имен XML объявляются с помощью атрибутов, размещенных в открывающих дескрипторах. Существует соглашение, согласно которому все используемые в документе пространства имен должны быть объявлены в первом же дескрипторе, как в данном примере. Это существенно облегчает визуальный анализ документа, поскольку избавляет от необходимости искать объявления во всей разметке. После объявления пространства имен его можно использовать в любом месте документа.

Базовые пространства имен Silverlight

Наиболее полезны первые два пространства имен. Их нужно знать для доступа к важным частям инфраструктуры Silverlight.

•       http://schemas.microsoft.com/winfx/2006/xaml/presentation — базовое пространство имен Silverlight. Оно содержит все классы Silverlight, включая UserControl и Grid. Обычно оно объявляется без префикса, поэтому оно служит пространством имен, заданным по умолчанию для всего документа. Иными сло­вами, если не указано обратное, каждый элемент автоматически располагается в этом пространстве имен.

•       http: //schemas.microsoft.com/winfx/2006/xaml — пространство имен XAML. Содержит различные средства XAML, позволяющие манипулировать способами интерпретации документа. Данное пространство имен обозначается префиксом х. Это означает, что его можно применить, расположив префикс перед именем элемента (<х:имя_элемента> и х:Class=" имя_класса").

Информация о пространстве имен позволяет синтаксическому анализатору XAML найти нужный класс. Например, когда синтаксический анализатор видит элементы UserControl и Grid, он знает, что они принадлежат установленному по умолчанию пространству имен http://schemas.vicrosoft.com/winfx/2006/xaml/presenta­tion. Благодаря этому анализатор находит соответствующие классы System.Windows. UserControl и SystemWindows.Controls.Grid.

Пространства имен XAML и Silverlight

Пространство имен XAML не добавлено в одно пространство имен Silverlight. Вместо этого все пространства имен Silverlight находятся в одном и том же пространстве имен XML. Создатели спецификации XAML предпочли такую ар­хитектуру по нескольким причинам. По общепринятым соглашениям пространства имен XML часто имеют форму URI (как в данном случае). Имена пространств имен выглядят так, будто они указывают на некоторый ресурс в Интернете, но в действительности они ни на что не указывают. Формат URI применяется, чтобы гарантировать уникальность имен, присвоенных разным пространствам имен. Разные организации не имеют одинаковых URI, поэтому они могут присваивать свои URI собственным пространствам имен, не опасаясь, что кто-либо применит такое же имя. Домен schemas .microsoft. com принадлежит компании Microsoft, поэтому только Microsoft может использовать этот URI в именах пространств имен XML.

Еще одна причина отсутствия взаимно однозначного соответствия между пространствами имен XAML и Silverlight со­стоит в том, что это существенно усложнило бы документы XAML. Если бы каждое пространство имен Silverlight было представлено как отдельное пространство имен XML, вам пришлось бы выбирать правильное пространство имен для каждого элемента управления. Документы XAML и Silverlight быстро превратились бы в беспорядочное месиво. Поэтому создатели Silverlight предпочли отобразить все пространства имен Silverlight, содержащие элементы пользо­вательских интерфейсов, на единственное пространство имен XML. Это допустимо, поскольку Microsoft гарантирует, что в разных пространствах имен Silverlight никакие два класса не имеют одно и то же имя.

Рабочие пространства имен

Кроме базовых, есть два специальных пространства имен, ни одно из которых не является обязательным.

•       http://schemas.openxmlformats.org/markup-compatibility/20 0 6 —

пространство имен XAML, связанное с проблемами совместимости разметки с ра­бочей средой. Используется для сообщения синтаксическому анализатору XAML о том, какую информацию нужно обработать, а какую — проигнорировать.

•       http://schemas.microsoft.com/expression/blend/2008 — зарезервирован­ное рабочее пространство имен XAML, поддерживаемое программами Expression Blend и Visual Studio 2010. Используется для установки размеров графической панели для страницы.

В приведенном ниже примере применены оба этих пространства имен.

6 mc:Ignorable="d" d:DesignWidth="640" d:DesignHeight="480">

Свойства DesignWidth и DesignHeight находятся в пространстве имен http:// schemas .microsoft. com/expression/blend/2008. Они сообщают рабочей среде, что во время разработки страница должна иметь размеры 640

Свойство Ignorable находится в пространстве имен http://schemas . openxml- formats.org/markup-compatibility/2006. Оно сообщает инструменту XAML о том, что он должен проигнорировать части документа, обозначенные префиксом d и рас­положенные в пространстве имен http://schemas.microsoft.com/expression/ blend/2008. Иными словами, если синтаксический анализатор XAML не поймет слова DesignWidth и DesignHeight, их лучше пропустить, потому что они не так уж важны.

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

Пользовательские пространства имен

Во многих ситуациях необходим доступ к собственным пространствам имен в фай­ле XAML. Чаще всего он необходим, когда нужно применить пользовательский элемент управления Silverlight (пользовательским называется элемент управления, созданный вами или другим разработчиком, а не компанией Microsoft). В этом случае нужно опре­делить новый префикс пространства имен XML и добавить его в пользовательскую сбор­ку. Это можно сделать следующим образом.

<UserControl х:Class="SilverlightApplicationl.MainPage" xmlns:w="clr-namespace: Widgets,-assembly=WidgetLibrary"

Объявление пространства имен определяет три важных параметра.

•       Префикс пространства имен XML. Префикс применяется для ссылки на про­странство имен в документе XAML. В данном примере задан префикс w, однако можно задать любой идентификатор, не конфликтующий с другими префиксами пространств имен.

•       Название пространства имен .NET. В данном примере все классы расположены в пространстве имен Widgets. Если есть классы, которые нужно использовать в разных пространствах имен, их можно отобразить на разные или одно и то же пространство имен XML, при условии что они не конфликтуют с другими имена­ми классов.

• Имя сборки. В данном примере классы находятся в сборке widhetLibrary.dll. Расширение .dll в имя сборки не добавляется. Драйвер Silverlight ищет данную сборку в том же пакете ХАР, в котором определена сборка проекта.

Примечание. Не забывайте, что в Silverlight используется облегченная версия CLR. Поэтому в приложении Silverlight нельзя применять сборки полнофункциональных библиотек классов. Вместо них нужно применять библиотеки классов Silverlight. В рабочей среде Visual Studio легко создать пользовательскую библиотеку классов Silverlight, выбрав шаблон проекта Silverlight Class Library (Библиотека классов Silverlight).

Если нужно применить пользовательский элемент управления, расположенный в текущем приложении, можете опустить часть, посвященную сборке.

xmlns:w="clr-namespace:Widgets"

Отобразив пространство имен .NET на пространство имен XML, его можно исполь­зовать в любом месте документа XAML. Например, если пространство имен Widgets содержит элемент управления HotButton, создать его экземпляр можно следующим образом.

<w:HotButtonj Text="Щелкните здесь!" Click="DoSomething">

</w:HotButton>

Рассмотренные выше средства часто используются в книге для доступа к элементам управления, определенным в дополнительных сборках и пакете Silverlight Toolkit.

Источник: Мак-Дональд, Мэтью. Silverlight 3 с примерами на С# для профессионалов. : Пер. с англ. —- М. : ООО «И.Д. Вильяме», 2010. — 656 с. : ил. — Парал. тит. англ.

По теме:

  • Комментарии