Создание ресурса XAML из кода без ключа

есть ли способ добавить ресурс в 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 не работает.

2 ответов


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

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);

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