Главная » Silverlight » Динамическое разрешение значений

0

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

1.     Анимация. Если активная в данный момент анимация изменила значение свой­ства, используется свойство анимации.

2.     Локальное значение. Если явно установить значение в разметке XAML или коде, оно становится локальным. Локальное значение можно установить с по­мощью метода SetValue () или оболочки свойства. Если установить свойство посредством связывания данных (глава 16) или ресурса (глава 2), значение тоже будет интерпретироваться как локальное.

3.     Стили. Стили Silverlight  позволяют конфигурировать многие элементы управления с помощью одного правила. Стиль, примененный к элементу управ­ления, устанавливает его зависимые свойства.

4.     Наследование значений свойства. Наследование значений доступно лишь в не­скольких элементах управления, включая Foreground, FontFamily, FontSize,

FontStretch, FontStyle и FontWeight. Это означает, что если установить эти свойства в контейнере верхнего уровня (например, Button или ContentControl), они каскадируются вниз по дереву до приемлемого содержимого (например, до содержимого элемента TextBlock, в котором фактически находится текст).

Примечание. Ограничения наследования приводят к тому, что используемое свойство должно предоставляться контейнером. Предположим, разработчик пытается задать стандартный шрифт для всей страницы, установив свойство FontFamily корневого элемента Grid. Однако это не приведет к желаемому результату, потому что класс Grid не наследует класс Control и по этой причине не предоставляет свойство FontFamily. Одно из решений проблемы состоит в заключении всех элементов в оболочку ContentControl, которая, хоть и не выводится на экран, но предоставляет свойства, поддерживающие наследование значений.

5. Значение по умолчанию. Если ни один провайдер значения в данный момент не работает, зависимое свойство получает значение, установленное по умолча­нию. Оно задается с помощью объекта PropertyMetadata при создании зависи­мого свойства (см. выше).

Одно из главных преимуществ зависимых свойств, по сравнению с обычными, со­стоит в том, что они очень экономные. Например, если значение свойства не было уста­новлено локально, надстройка Silverlight извлекает значение из шаблона или стиля. Поэтому для хранения значения дополнительная память не требуется. Другое преиму­щество состоит в том, что провайдеры свойств могут переопределять друг друга, но при этом они не перезаписывают значения. Например, если установить локальное свойство, а затем запустить анимацию, она временно перехватит управление. Однако локальное значение остается, и по завершении анимации оно вступает в силу.

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

По теме:

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