有没有办法从代码中向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。但是,在没有Key的XAML中,默认情况下,它用于所有FieldPropertyInfo类型。有没有办法在没有密钥的情况下将它添加到代码中的资源,或者有没有办法可以使用密钥并且仍然在所有FieldPropertyInfo类型上使用它?
到目前为止,这是我在C#中所做的:
HierarchicalDataTemplate fieldPropertyTemplate = new HierarchicalDataTemplate("FieldProperyInfo");
fieldPropertyTemplate.ItemsSource = new Binding("Value.Values");
this.Resources.Add(null, fieldPropertyTemplate);
显然,将资源添加到ResourceDictionary时,键null不起作用。
答案 0 :(得分:8)
使用您希望模板应用的类型作为键:
HierarchicalDataTemplate fieldPropertyTemplate = new
HierarchicalDataTemplate("FieldProperyInfo");
fieldPropertyTemplate.SetBinding(
HierarchialDataTemplate.ItemSourceProperty,
new Binding("Value.Values");
this.Resources.Add(FieldPropertyInfo.GetType(), fieldPropertyTemplate);
您的代码无效的原因是您的实际上并未设置绑定。您需要使用要绑定绑定的属性调用SetBinding。
答案 1 :(得分:0)
使用您希望模板应用的类型作为键:
this.Resources.Add(FieldPropertyInfo.GetType(), fieldPropertyTemplate);
与上面的模板一样,您提供了一种类型。您必须提供姓名或类型。