Создание ресурса XAML из кода без ключа - PullRequest
7 голосов
/ 26 сентября 2008

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

Ответы [ 2 ]

8 голосов
/ 26 сентября 2008

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

HierarchicalDataTemplate fieldPropertyTemplate = new 
    HierarchicalDataTemplate("FieldProperyInfo");

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

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

0 голосов
/ 26 сентября 2008

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

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

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

...