Вопрос об этом расширении разметки xaml

Я пытаюсь понять, что делает расширение разметки для атрибута x:Key ниже и что это за расширение разметки?

<Window x:Class="App1.Window1" xmlns:dxg="http://schemas.microsoft.com/winfx/2006/xaml/presentation">

<DataTemplate x:Key="{dxg:Example ResourceKey=Example}">
    <dxg:TextEdit Text="123/>
</DataTemplate>

</Window>

Благодарю.

2 ответа

Решение

Ну, этот пример ничего не будет делать, скорее, он потерпит неудачу, потому что расширение разметки не называется Example в пространстве имен WPF.

Но если бы существовало расширение разметки с именем Example, что бы он сделал, это создать экземпляр ExampleMarkupExtension объект, установите его ResourceKey свойство, а затем назвать его ProvideValue метод, который возвращает объект, который будет использоваться в качестве ключа для элемента, добавляемого в словарь ресурсов.

Без большего контекста трудно понять, что приведенный вами пример предназначен для демонстрации. Я предполагаю, что демонстрируемые концепции: а) что ключом к словарю ресурсов может быть любой объект, а не просто строка, и б) что вы можете использовать расширение разметки для генерации этого ключа. Реальный пример:

<DataTemplate x:Key="{x:Type TextBox}">

который добавляет DataTemplate с ключом typeof(TextBox) в словарь ресурсов.

Обычно атрибут x:Key позволяет вам ссылаться на ресурс по ключу, в этом случае, поскольку шаблон не находится в ResourceDictionary, я не уверен, что он имеет какое-либо назначение!

Надеюсь это поможет!

Другие вопросы по тегам