Вопрос

Есть ли способ добавить ресурс в ResourceDictionary из кода, не предоставляя ему ключ ресурса?

Например, у меня есть этот ресурс в XAML:

<TreeView.Resources>
    <HierarchicalDataTemplate DataType="{x:Type xbap:FieldPropertyInfo}"
        ItemsSource="{Binding Path=Value.Values}">
            <TextBlock Text="{Binding Path=Name}" />
    <HierarchicalDataTemplate>
</TreeView.Resources>

Мне нужно динамически создать этот ресурс из кода и добавить его в TreeView ResourceDictionary.Однако в XAML отсутствие ключа означает, что он используется по умолчанию для всех типов FieldPropertyInfo.Есть ли способ добавить его к ресурсу в коде без наличия ключа или есть способ, которым я могу использовать ключ и при этом использовать его для всех типов FieldPropertyInfo?

Вот что я уже сделал на C #:

HierarchicalDataTemplate fieldPropertyTemplate = new HierarchicalDataTemplate("FieldProperyInfo");

fieldPropertyTemplate.ItemsSource = new Binding("Value.Values");

this.Resources.Add(null, fieldPropertyTemplate);

Очевидно, что добавление ресурса в ResourceDictionary с ключом null не работает.

Это было полезно?

Решение

Используйте тип, к которому вы хотите применить шаблон, в качестве ключа:

HierarchicalDataTemplate fieldPropertyTemplate = new 
    HierarchicalDataTemplate("FieldProperyInfo");

fieldPropertyTemplate.SetBinding(
   HierarchialDataTemplate.ItemSourceProperty, 
   new Binding("Value.Values");
this.Resources.Add(FieldPropertyInfo.GetType(), fieldPropertyTemplate);

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

Другие советы

Используйте тип, к которому вы хотите применить шаблон, в качестве ключа:

this.Resources.Add(FieldPropertyInfo.GetType(), fieldPropertyTemplate);

Как и в случае с вашим шаблоном выше, вы указываете тип.Вы должны либо указать имя, либо тип.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top