Поделиться через


Расширение разметки 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 Markup. См. в ресурсах XAML для обсуждения относительных преимуществ и последствий и .

Указанный ResourceKey должен соответствовать существующему ресурсу, определенному директивой x:Key на одном из уровней вашей страницы, приложения, доступных тем оформления, внешних или системных ресурсов, и поиск ресурсов будет выполняться в этом порядке. Дополнительные сведения о поиске статических и динамических ресурсов см. в разделе ресурсов XAML .

Ключ ресурса может быть любой строкой, определенной в грамматике XamlName. Ключ ресурса также может быть другими типами объектов, например Type. Ключ Type является фундаментальным для того, как темы могут стилизовать элементы управления. Дополнительные сведения см. в разделе Обзор создания.

API для поиска значений ресурсов, таких как FindResource, использует ту же логику поиска ресурсов, что и DynamicResource.

Альтернативным декларативным средством ссылки на ресурс является расширение разметки staticResource.

Синтаксис атрибутов — это наиболее распространенный синтаксис, используемый с этим расширением разметки. Строковый маркер, предоставленный после строки идентификатора DynamicResource, присваивается в качестве значения ResourceKey базового класса расширения DynamicResourceExtension.

DynamicResource можно использовать в синтаксисе элемента объекта. В этом случае необходимо указать значение свойства ResourceKey.

DynamicResource также можно использовать в подробном обозначении атрибута, указывающем свойство ResourceKey как пару property=value.

<object property="{DynamicResource ResourceKey=key}" ... />  

Развернутое использование часто полезно для расширений, имеющих несколько устанавливаемых свойств, или если некоторые свойства являются необязательными. Так как DynamicResource имеет только одно настраиваемое свойство, которое обязательно, подобное подробное использование не является типичным.

В реализации обработчика XAML WPF обработка этого расширения разметки определяется классом DynamicResourceExtension.

DynamicResource — это расширение разметки. Расширения разметки обычно реализуются, когда необходимо экранировать значения атрибутов, отличающиеся от литеральных значений или имён обработчиков, и это требование является более широким, чем просто использование преобразователей типов для определённых типов или свойств. Все расширения разметки в XAML используют символы { и } в синтаксисе атрибутов, что является соглашением, с помощью которого обработчик XAML распознает, что расширение разметки должно обрабатывать атрибут. Дополнительные сведения см. в разделе Расширения разметки иXAML WPF.

См. также