. Обратите внимание, что с помощью синтаксиса присоединяемых свойств элемент
Ellipse
способен информировать свой родительский элемент (
Canvas
) о том, где располагать позицию его левого верхнего угла.
В отношении присоединяемых свойств следует иметь в виду несколько моментов. Прежде всего, это не универсальный синтаксис, который может применяться к любому свойству любого родительского элемента. Скажем, приведенная далее разметка XAML содержит ошибку:
<!--
Попытка установки свойства Background в Canvas
через присоединяемое свойство. Ошибка! – ->
<Canvas Height="200" Width="200">
<Ellipse Canvas.Background="LightBlue"
Canvas.Top="40" Canvas.Left="90"
Height="20" Width="20" Fill="DarkBlue"/>
</Canvas>
Присоединяемые свойства являются специализированной формой специфичной для WPF концепции, которая называется свойством зависимости. Если только свойство не было реализовано в весьма специальной манере, то его значение не может быть установлено с использованием синтаксиса присоединяемых свойств. Свойства зависимости подробно исследуются в главе 25.
На заметку! В Visual Studio имеется средство
IntelliSense
, которое отображает допустимые присоединяемые свойства, доступные для установки заданным элементом.
Понятие расширений разметки XAML
Как уже объяснялось, значения свойств чаще всего представляются в виде простой строки или через синтаксис "свойство-элемент". Однако существует еще один способ указать значение атрибута XAML — применение расширений разметки. Расширения разметки позволяют анализатору XAML получать значение для свойства из выделенного внешнего класса. Это может обеспечить большие преимущества, поскольку для получения значений некоторых свойств требуется выполнение множества операторов кода.
Расширения разметки предлагают способ аккуратного расширения грамматики XAML новой функциональностью. Расширение разметки внутренне представлено как класс, производный от
MarkupExtension
. Следует отметить, что необходимость в построении специального расширения разметки возникает крайне редко. Тем не менее, некоторые ключевые слова XAML (вроде
х:Array
,
x:Null
,
х:Static
и
х:Туре
) являются замаскированными расширениями разметки!
Расширение разметки помещается между фигурными скобками:
содержит новое объявление пространства имен XML, которое позволяет получать доступ к пространству имен
System
сборки
mscorlib.dll
. После установления этого пространства имен XML первым делом с помощью расширения разметки
х:Static
извлекаются значения свойств
OSVersion
и
ProcessorCount
класса
System.Environment
.
Расширение разметки
х:Туре
обеспечивает доступ к описанию метаданных указанного элемента. Здесь содержимому элементов
Label
просто присваиваются полностью заданные имена типов
Button
и
System.Boolean
из WPF.
Наиболее интересная часть показанной выше разметки связана с элементом
ListBox
. Его свойство
Itemsourсе
устанавливается в массив строк, полностью объявленный в разметке. Взгляните, каким образом расширение разметки
х:Array
позволяет указывать набор подэлементов внутри своей области действия:
<x:Array Type="CorLib:String">
<CorLib:String>Sun Kil Moon</CorLib:String>
<CorLib:String>Red House Painters</CorLib:String>
<CorLib:String>Besnard Lakes</CorLib:String>
</x:Array>
На заметку! Предыдущий пример XAML служит только для иллюстрации расширения разметки в действии. Как будет показано в главе 25, существуют гораздо более простые способы наполнения элементов управления