Расширение разметки DynamicResource
Предоставляет значение для любого атрибута свойства XAML, исходя из того, что это значение будет ссылкой на уже определенный ресурс. Механизм поиска этого ресурса аналогичен поиску во время выполнения.
Использование атрибута XAML
<object property="{DynamicResource key}" .../>
Использование элемента свойства XAML
<object>
<object.property>
<DynamicResource ResourceKey="key" .../>
</object.property>
</object>
Значения XAML
key |
Ключ для запрашиваемого ресурса. Этот ключ был изначально присвоен атрибутом Директива x:Key, если ресурс был создан в разметке, или был предоставлен в качестве параметра key при вызове метода ResourceDictionary.Add, если ресурс создавался в коде. |
Заметки
DynamicResource создаст временное выражение во время начальной компиляции и, таким образом, отложит поиск ресурсов до тех пор, пока значение запрошенного ресурса действительно не понадобится для создания объекта. Потенциально это может быть после загрузки страницы XAML. Значение ресурса будет найдено на основе ключа поиска по всем словарям активных ресурсов, начиная с текущей области страницы, и заменено замещающим выражением из компиляции.
Важно |
---|
В терминах приоритета свойства зависимости, выражение DynamicResource эквивалентно позиции, в которой применяется динамическая ссылка на ресурс.В случае задания локального значения для свойства, которое ранее имело в качестве локального значения выражение DynamicResource, DynamicResource полностью удаляется.Дополнительные сведения см. в разделе Приоритет значения свойств зависимостей. |
Определенные сценарии доступа к ресурсу особенно подходят для DynamicResource, в отличие от Расширение разметки StaticResource. Обсуждение относительных достоинств и влияния DynamicResource и StaticResource на производительность см. в разделе Общие сведения о ресурсах.
Указанный ResourceKey должен соответствовать существующему ресурсу, определяемому Директива x:Key на некотором уровне в странице, приложении, доступных темах элементов управления, внешних или системных ресурсах; поиск ресурса будет выполняться в указанном порядке. Дополнительные сведения о поиске ресурса для статических и динамических ресурсов см. в разделе Общие сведения о ресурсах.
Ключ ресурса может быть любой строкой, определенной в Грамматика XamlName. Ключ ресурса также может быть и другим типом объекта, таким как Type. Ключ Type является основой управления стилями элементов управления при помощи тем. Дополнительные сведения см. в разделе Общие сведения о разработке управления.
APIs для поиска значений ресурсов, например FindResource, следуют той же логике поиска ресурса, которая используется DynamicResource.
Альтернативным декларативным средством ссылки на ресурс является Расширение разметки StaticResource.
Синтаксис атрибута является наиболее распространенным синтаксисом, который используется с этим расширением разметки. Лексема строки, указанная после строки идентификатора DynamicResource, присваивается как значение ResourceKey базового класса расширения DynamicResourceExtension.
В синтаксисе элемента объекта может использоваться DynamicResource. В этом случае указание значения свойства ResourceKey является обязательным.
Излишним может оказаться использование DynamicResource в атрибуте, в котором свойство ResourceKey определено как пара «свойство=значение».
<object property="{DynamicResource ResourceKey=key}" .../>
Подробное определение зачастую удобно использовать для расширений, которые имеют несколько устанавливаемых свойств, а также в том случае, если некоторые свойства являются необязательными. Поскольку DynamicResource имеет только одно устанавливаемое свойство, которое является обязательным, это использование не является типичным.
В реализации процессора XAML WPF обработка данного расширения разметки определяется классом DynamicResourceExtension.
DynamicResource является расширением разметки. Расширения разметки обычно реализуются, если требуется заменить значения атрибутов на нелитеральные значения или имена обработчиков и если требуется не только простая настройка преобразователей типов на работу с определенными типами или свойствами. Все расширения разметки в XAML используют символы { and } в синтаксисе их атрибутов, который является соглашением, по которому процессор XAML распознает, что расширение разметки должно обработать атрибут. Дополнительные сведения см. в разделе Расширения разметки и XAML WPF.
См. также
Ссылки
Расширение разметки StaticResource
Основные понятия
Общие сведения о языке XAML (WPF)