2008-09-26 39 views
7

有没有一种方法可以从代码中将资源添加到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中的关键零不起作用。

回答

8

使用所需的模板,适用于作为主要的类型:

HierarchicalDataTemplate fieldPropertyTemplate = new 
    HierarchicalDataTemplate("FieldProperyInfo"); 

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

你的代码是不工作是原因你实际上没有设置绑定。您需要调用SetBinding,并将绑定绑定到的属性。

0

使用所需的模板,适用于作为主要的类型:

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

与您的模板上面你提供一个类型。您必须提供名称或类型。

+0

虽然这样运行,但TreeView没有使用该模板。看起来像关于资源键的东西阻止它被使用。 – 2008-09-26 18:12:15