在没有关键字的情况下,通过代码创建XAML资源

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作为键是行不通的。
2个回答

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);

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


虽然代码可以运行,但是TreeView没有使用模板。看起来是与资源键有关的问题阻止了它的使用。 - Bob Wintemberg
@Orion:所以你看到了我的答案,然后完全编辑了你的答案来复制我的?真的很有品位... - Bob King

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接