7

有没有办法从代码中将资源添加到 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 中没有 Key 意味着它默认用于所有 FieldPropertyInfo 类型。有没有办法在没有密钥的情况下将其添加到代码中的资源中,或者有没有办法我可以使用密钥并仍然在所有 FieldPropertyInfo 类型上使用它?

到目前为止,这是我在 C# 中所做的:

HierarchicalDataTemplate fieldPropertyTemplate = new HierarchicalDataTemplate("FieldProperyInfo");

fieldPropertyTemplate.ItemsSource = new Binding("Value.Values");

this.Resources.Add(null, fieldPropertyTemplate);

显然,将资源添加到 ResourceDictionary 键为 null 不起作用。

4

2 回答 2

8

使用您希望模板应用的类型作为键:

HierarchicalDataTemplate fieldPropertyTemplate = new 
    HierarchicalDataTemplate("FieldProperyInfo");

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

您的代码不起作用的原因是您实际上并没有设置 binding。您需要使用您希望绑定绑定到的属性调用 SetBinding。

于 2008-09-26T18:05:37.670 回答
0

使用您希望模板应用的类型作为键:

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

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

于 2008-09-26T18:03:13.417 回答