Главная » Silverlight » Свойства и события в XAML

0

До сих пор рассматривался довольно скучный пример — пустая страница, хости- рующая пустой элемент управления Grid. Прежде чем двигаться дальше, рассмотрим более реалистичную страницу, содержащую несколько элементов. На рис. 2.1 показан пример приложения EightBall, которое автоматически отвечает на вопросы. На то, что ответы не очень осмысленные, пока не обращайте внимания. В ответ на любой вопрос программа случайным образом выбирает одну из заранее подготовленных фраз.

Рис. 2.1. Щелкните на кнопке, чтобы получить ответ

Тестовая страница содержит четыре элемента: Grid (этот элемент обычно исполь­зуется для макетирования почти каждой страницы Silverlight), два объекта TextBox (Текстовое поле) и Button (Кнопка). Разметка, необходимая для компоновки и конфигу­рирования этих элементов, намного длиннее, чем в предыдущих примерах. Ниже при­ведена сокращенная разметка, отображающая общую структуру (опущенные подробно­сти обозначены многоточиями).

<OserControl x:Class="EightBall.MainPage" xmlns="http://schemas.microsoft.com/winfx/2 00 6/xaml/?

presentation"

xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Width="400" Height="300">

<Grid x:Name="gridl"> <Grid.Background>

</Grid.Background> <Grid.RowDefinitions>

</Grid.RowDefinitions>

CTextBox x:Name="txtQuestion" … >

</TextBox>

<Button x:Name="cmdAnswer" … > </Button>

<TextBox x:Name="txtAnswer" … >

</TextBox> </Grid> </UserControl>

В следующих разделах рассматриваются части этого документа и синтаксис XAML.

Преобразование свойств и типов

Атрибуты элемента задают свойства соответствующего объекта. Например, атрибу­ты элемента TextBox конфигурируют выравнивание, внешние рамки и шрифт.

CTextBox x:Name="txtQuestion"

VerticalAlignment="Stretch" HorizontalAlignment="Stretch" FontFamily="Verdana" FontSize="24" Foreground="Green" … >

Чтобы разметка была работоспособной, класс System.Windows . Controls . TextBox должен предоставить следующие свойства: VerticalAlignment (Выравнивание по вер­тикали), HorizontalAlignment (Выравнивание по горизонтали), FontFamily (Семейство шрифтов), FontSize (Размер шрифта) и Foreground (Цвет переднего плана). Назначение каждого из этих свойств рассматривается в следующих главах.

Совет. Есть три специальных символа, которые нельзя ввести непосредственно в строку значения атрибута, — кавычка, открывающая и закрывающая скобки. Чтобы применить эти символы в строке атрибута, нужно заменить их эквивалентными представлениями XML. Кавычку нужно заменить представлением squot;, открывающую скобку — sit;, а закрывающую скобку — sgt;. Учитывайте, что указанные представления нужно использовать в разметке XAML, но не в коде С#.

Значение атрибута XML — это простая текстовая строка. Однако свойство объек­та может быть любого типа, допустимого в .NET. В предыдущем примере есть несколь­ко свойств: два свойства, в которых используются перечисления (VerticalAlignment и HorizontalAlignment), одно строковое значение (FontFamily), одно целочисленное (FontSize) и один объект типа Brush (объект Foreground).

Чтобы отобразить строковые значения на нестроковые свойства, синтаксический анализатор XAML выполняет преобразование типов, как и в полнофункциональной инфраструктуре .NET Framework. Синтаксический анализатор находит нужный метод преобразования в два этапа.

1.     Поиск объявления свойства, а в нем — атрибута TypeConverter (Преобразова­тель типов). Если этот атрибут присутствует, в нем указан класс, который может выполнить преобразование. Например, если используется свойство Foreground, синтаксический анализатор в первую очередь ищет его объявление.

2.     Если в объявлении свойства нет атрибута TypeConverter, синтаксический ана­лизатор проверяет объявление класса соответствующего типа данных. Напри­мер, в свойстве Foreground используется объект Brush (Кисть). В классе Brush и его производных классах используется преобразователь BrushConverter, по­скольку класс Brush содержит значение typeof(BrushConverter) атрибута TypeConverter.

Если в объявлении свойства или класса нет преобразователя типов, ассоциирован­ного со свойством, синтаксический анализатор XAML генерирует сообщение об ошибке.

Как видите, система простая, но гибкая. Когда преобразователь типов установлен на уровне класса, он применяется ко всем свойствам, в которых используется данный класс. С другой стороны, если для некоторого свойства нужно тонко настроить способ преобразования, можно вместо преобразователя на уровне класса применить атрибут TypeConverter на уровне свойства.

Преобразователи типов можно применять также в коде, однако их синтаксис доволь­но запутанный. Почти всегда лучше установить свойство непосредственно в разметке. Это не только быстрее, но и позволяет избежать потенциальных ошибок, связанных с опечатками при вводе строк. Такие ошибки обнаруживаются только во время выпол­нения. Данная проблема не затрагивает документы XAML, поскольку синтаксический анализатор, обрабатывая разметку, проверяет ее на валидность во время компиляции.

Примечание. Язык XAML, как и любой другой язык на основе XML, чувствителен к регистру букв. Это означает, что написать <button> вместо <Button> нельзя. Однако преобразователи типов обычно не чувствительны к регистру букв. Например, записи Foreground="White" и Foreground="white" эквивалентны.

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

По теме:

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