Главная » Разработка для Windows Phone 7 » Синтаксис свойство-элемент Windows Phone 7

0

Удалим все имеющиеся задания FontStyle и присвоим атрибутам TextBlock следующие значения:

<TextBlock Text="Hello, Windows Phone 7!" FontSize="3 6" Foreground="Red" />

Поскольку это XML, мы можем разделить тег TextBlock на открывающий и закрывающий теги, ничего не вставив между ними:

<TextBlock Text="Hello, Windows Phone 7!" FontSize="3 6" Foreground="Red"> </TextBlock>

Но можно сделать то, что на первый взгляд покажется странным. Удалим атрибут FontSize из открывающего тега и зададим его следующим образом:

<TextBlock Text="Hello, Windows Phone 7!" Foreground="Red"> <TextBlock.FontSize> 36

</TextBlock.FontSize> </TextBlock>

Теперь у TextBlock есть дочерний элемент TextBlock.FontSize, и его значение задано между тегами TextBlock.FontSize.

Это синтаксис свойства-элемента (property-element). Он играет весьма важную роль в XAML. Введение такого синтаксиса также способствует закреплению некоторой терминологии, объединяющей .NET и XML. Теперь этот один элемент TextBlock включает три типа идентификаторов:

•                                   TextBlock – это объектный элемент, т.е. объект .NET, созданный на базе XML-элемента.

•         Text и Foreground – это свойства-атрибуты (property attributes), т.е. .NET-свойства, заданные как XML-атрибуты.

•         FontSize теперь задается свойством-элементом, т.е. .NET-свойством, выраженным как XML-элемент.

Впервые увидев синтаксис свойства-элемента, я подумал, не является ли это каким-то расширением XML. Конечно, нет. Точка – вполне допустимый символ для XML-тегов, поэтому с точки зрения вложенных XML-тегов все абсолютно законно. Вот то что они включают имя

класса и имя свойства – это специфика, которую распознают только синтаксические анализаторы XAML (как машинные, так и двуногие).

Однако есть одно ограничение: в теге свойства-элемента не может быть больше ничего:

<TextBlock Text="Hello, Windows Phone 7!" Foreground="Red"> <!– Недопустимый тег свойства-элемента! –> <TextBlock.FontSize здесь не может быть больше ничего!> 36

</TextBlock.FontSize> </TextBlock>

Также нельзя создать для одного и того же свойства и свойство-атрибут, и свойство-элемент, как сделано в данном фрагменте:

<TextBlock Text="Hello, Windows Phone 7!" FontSize="3 6" Foreground="Red"> <TextBlock.FontSize> 36

</TextBlock.FontSize> </TextBlock>

Это неправильно, потому что свойство FontSize задано дважды.

Если вернуться к началу MainPage.xaml, можно увидеть еще одно свойство-элемент:

<Grid.RowDefinitions>

RowDefinitions (Описания строк) – это свойство Grid. В App.xaml мы найдем еще два:

<Application.Resources>

<Application.ApplicationLifetimeObjects>

И Resources (Ресурсы), и ApplicationLIfeTimeObjects (Объекты времени жизни приложения) являются свойствами Application.

Источник: Чарльз Петзольд, Программируем Windows Phone 7, Microsoft Press, © 2011.

По теме:

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