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


Расширение разметки DynamicResource

Обеспечивает значение для атрибута свойства XAML путем откладывания этого значения в виде ссылки на определенный ресурс. Поведение поиска для этого ресурса аналогично поиску во время выполнения.

Использование атрибута XAML

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

Использование элемента свойства XAML

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

Значения XAML

Стоимость Description
key Ключ для запрашиваемого ресурса. Этот ключ изначально был назначен директивой x:Key, если ресурс был создан в разметке или был предоставлен в качестве параметра key при вызове ResourceDictionary.Add, если ресурс был создан в коде.

Замечания

DynamicResource создаст временное выражение во время начальной компиляции и, следовательно, отложит поиск ресурсов до тех пор, пока запрашиваемое значение ресурса не потребуется для создания объекта. Это может быть возможно после загрузки страницы XAML. Значение ресурса будет вычислено на основе поиска ключей по всем активным словарям ресурсов, начиная с текущей области страницы, и заменяется выражением заполнителя из компиляции.

Важно!

С точки зрения приоритета свойств зависимостей выражение DynamicResource эквивалентно положению, в котором применяется ссылка на динамический ресурс. Если задать локальное значение для свойства, которое ранее содержало выражение DynamicResource как локальное значение, DynamicResource удаляется полностью. Дополнительные сведения см. в разделе Приоритет значений свойств зависимостей.

Некоторые сценарии доступа к ресурсам особенно подходят для DynamicResource в отличие от расширения разметки StaticResource. Сведения об относительных преимуществах и последствиях в плане производительности см. в разделе Ресурсы XAML в DynamicResource и StaticResource.

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

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

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

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

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

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

Излишним может оказаться и использование DynamicResource в атрибуте, в котором свойство ResourceKey определено как пара "свойство=значение".

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

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

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

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

См. также