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.
См. также
.NET Desktop feedback