Расширение разметки ComponentResourceKey
Определяет и ссылается на ключи для ресурсов, загруженные из внешних блоков. Это позволяет при поиске ресурса для указания типа целевого объекта сборки, вместо явного словаря ресурса в сборке или в классе.
Использование атрибута XAML (Установка ключа, compact)
<object x:Key="{ComponentResourceKey {x:Type targetTypeName}, targetID}" .../>
Использование атрибута XAML (Установка ключа, подробный)
<object x:Key="{ComponentResourceKey TypeInTargetAssembly={x:Type targetTypeName}, ResourceID=targetID}" .../>
Использование атрибута XAML (запрос ресурса, compact)
<object property="{DynamicResource {ComponentResourceKey {x:Type targetTypeName}, targetID}}" .../>
Использование атрибута XAML (запрос ресурса, подробный)
<object property="{DynamicResource {ComponentResourceKey TypeInTargetAssembly={x:Type targetTypeName}, ResourceID=targetID}}" .../>
Значения XAML
targetTypeName |
Имя открытого CLR тип, определенный в сборке ресурсов. |
targetID |
Ключ ресурса. Когда ресурсы ищутся, targetID будут аналогичны директивы x: Key ресурса. |
Примечания
Как показано выше, варианты использования {ComponentResourceKey
} расширение разметки можно найти в двух местах:
Определение ключа в словарь ресурсов темы, предоставленный автором элемента управления.
При доступе к ресурсу темы из сборки, являются создания новых шаблонов элемента управления, но хотите использовать значения свойств, поступающие от ресурсов, предоставляемых темы для элемента управления.
Для ссылки на ресурсы компонента, поступающие от темы, обычно рекомендуется использовать {DynamicResource}
вместо {StaticResource}
. Это показано в варианты использования. {DynamicResource}
рекомендуется, поскольку тема сама по себе может быть изменена пользователем. Если требуется ресурс компонента, который наиболее близко соответствует намерениям автора элемента управления для поддержки темы, следует включить также быть динамической ссылке ресурсов компонента.
TypeInTargetAssembly Определяет тип, который существует в целевой сборке, где фактически определен ресурс. Объект ComponentResourceKey
может быть определена и использовать независимо от точно зная, где TypeInTargetAssembly определен, но в конечном счете, необходимо разрешить тип с помощью указанных сборок.
Распространенным вариантом применения для ComponentResourceKey заключается в определении ключи, которые далее представляются в виде членов класса. Для данного использования можно использовать ComponentResourceKey конструктора класса, не расширения разметки. Дополнительные сведения см. в разделе ComponentResourceKey, или в разделе «Определение и создание ссылок на ключи для темы ресурсов» раздела Общие сведения о разработке управления.
Для установки ключей и ссылки на с ключом ресурсы, синтаксис атрибутов обычно используется для ComponentResourceKey
расширение разметки.
Зависит от compact синтаксис, показанный ComponentResourceKey.ComponentResourceKey сигнатура конструктора и использование позиционного параметра расширения разметки. Порядок, в котором targetTypeName
и targetID
получают важен. Подробный синтаксис зависит от ComponentResourceKey.ComponentResourceKey конструктор по умолчанию, а затем устанавливает TypeInTargetAssembly и ResourceId способом, который является аналогом true синтаксис объектного элемента. В подробном синтаксисе порядок, в котором задаются свойства не имеет значения. Связь и механизмы из этих двух вариантов (компактный и verbose) описан более подробно в разделе расширения разметки и XAML WPF.
С технической точки зрения значение targetID
может быть любой объект, у нее не в виде строки. Тем не менее, оно наиболее распространенных в WPF используется для выравнивания targetID
значение с помощью форм, представляют собой строки, и если такие строки допустимы в Грамматика XamlName.
ComponentResourceKey
может использоваться в синтаксисе элемента объекта. В этом случае укажите значение параметра оба TypeInTargetAssembly и ResourceId свойства, необходимые для правильной инициализации расширения.
В WPF XAML реализацию средства чтения, обработка данного расширения разметки определяется ComponentResourceKey класса.
ComponentResourceKey
является расширением разметки. Расширения разметки обычно реализуются, если требуется заменить значения атрибутов на нелитеральные значения или имена обработчиков и если требуется больше, чем простая настройка преобразователей типов на работу с определенными типами или свойствами. Все расширения разметки в XAML используют символы "{" и "}" в синтаксисе их атрибутов, который является соглашением, по которому обработчик XAML распознает, что расширение разметки должно обработать атрибут. Дополнительные сведения см. в разделе Расширения разметки и XAML WPF.