Создание ресурса 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);
Как и в вашем шаблоне выше, вы предоставляете тип. Вы должны либо указать имя, либо тип.