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


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

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

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

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

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

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

Значения XAML

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

Замечания

Важно!

Расширение StaticResource не должно пытаться создать опережающую ссылку на ресурс, который лексически определен далее в XAML-файле. Попытка сделать это не поддерживается, и даже если такая ссылка не завершается ошибкой, попытка создания опережающей ссылки приведет к затратам производительности во время загрузки при поиске по внутренним хэш-таблицам, представляющим объект ResourceDictionary. Для достижения наилучших результатов составляйте словари ресурсов так, чтобы обходиться без опережающих ссылок. Если не удается избежать опережающей ссылки, используйте расширение разметки DynamicResource.

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

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

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

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

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

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

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

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

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

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

См. также