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


X:Shared Attribute

Если задано значение false, изменяет поведение извлечения ресурсов WPF таким образом, чтобы запросы к ресурсу атрибута создавали новый экземпляр для каждого запроса, а не совместно использовать один экземпляр для всех запросов.

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

<ResourceDictionary>
  <object x:Shared="false".../>
</ResourceDictionary>

Замечания

x:Shared сопоставляется с пространством имен XAML языка XAML и распознается как допустимый элемент языка XAML службами .NET XAML и его средствами чтения XAML. Однако указанные возможности x:Shared применимы только для приложений WPF и синтаксического анализа XAML WPF. В WPF x:Shared полезно только в качестве атрибута при применении к объекту, который существует в ResourceDictionaryWPF. Другие способы использования не вызывают исключений синтаксического анализа или других ошибок, но они не влияют.

Значение x:Shared не указано в спецификации языка XAML. Другие реализации XAML, такие как те, которые создаются на основе служб XAML .NET, не обязательно обеспечивают поддержку совместного использования ресурсов. Такие реализации XAML могут обеспечить аналогичное поведение в вспомогательной платформе, которая также использовала x:Shared значения.

В WPF условие x:Shared по умолчанию для ресурсов true. Это условие означает, что любой заданный запрос ресурса всегда возвращает один и тот же экземпляр.

Изменение объекта, возвращаемого через API ресурсов, например FindResource, или изменение объекта непосредственно в ResourceDictionary, изменяет исходный ресурс. Если ссылки на этот ресурс были динамическими ссылками на ресурсы, потребители этого ресурса получают измененный ресурс.

Если ссылки на ресурс были статическими ссылками на ресурсы, изменения в ресурсе после времени обработки XAML не имеют значения. Дополнительные сведения о статических и динамических ссылках на ресурсы см. в обзоре ресурсов XAML (WPF .NET).

Явное указание x:Shared="true" редко выполняется, так как это уже используется по умолчанию. В объектной модели WPF нет прямого эквивалента кода для x:Shared; Он может быть указан только в использовании XAML и должен обрабатываться либо по умолчанию по умолчанию WPF, либо в промежуточном потоке узла XAML на пути загрузки при обработке с помощью служб XAML .NET и его средств чтения XAML.

Сценарий x:Shared="false" заключается в определении FrameworkElement или FrameworkContentElement производного класса в качестве ресурса, а затем в модели содержимого вводится ресурс элемента. x:Shared="false" позволяет несколько раз вводить ресурс элемента в одной коллекции (например, UIElementCollection). Без x:Shared="false" это недопустимо, так как коллекция обеспечивает уникальность его содержимого. Однако поведение x:Shared="false" создает другой идентичный экземпляр ресурса вместо возврата того же экземпляра.

Другим сценарием для x:Shared="false" является использование ресурса Freezable для значений анимации, но требуется изменить ресурс на основе анимации.

Обработка строк false не учитывает регистр.

В WPF x:Shared допустимы только в следующих условиях:

  • Необходимо скомпилировать ResourceDictionary, содержащий элементы с x:Shared. ResourceDictionary не может находиться в свободном коде XAML или использоваться для тем.

  • ResourceDictionary, содержащий элементы, не должны быть вложены в другой ResourceDictionary. Например, нельзя использовать x:Shared для элементов в ResourceDictionary, который находится в Style, который уже является элементом ResourceDictionary.

См. также