从没有密钥的代码创建XAML资源
问题描述:
有没有一种方法可以从代码中将资源添加到ResourceDictionary中,而不必为其提供资源密钥?从没有密钥的代码创建XAML资源
举例来说,我有这个资源在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中的关键零不起作用。
答
使用所需的模板,适用于作为主要的类型:
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);
与您的模板上面你提供一个类型。您必须提供名称或类型。
虽然这样运行,但TreeView没有使用该模板。看起来像关于资源键的东西阻止它被使用。 – 2008-09-26 18:12:15