从没有密钥的代码创建 XAML 资源

本文关键字:创建 XAML 资源 代码 密钥 | 更新日期: 2023-09-27 17:47:21

有没有办法在不给它资源键的情况下从代码将资源添加到资源字典中?

例如,我在 XAML 中有此资源:

<TreeView.Resources>
    <HierarchicalDataTemplate DataType="{x:Type xbap:FieldPropertyInfo}"
        ItemsSource="{Binding Path=Value.Values}">
            <TextBlock Text="{Binding Path=Name}" />
    <HierarchicalDataTemplate>
</TreeView.Resources>

我需要从代码动态创建此资源,并将其添加到树视图资源字典中。 但是,在 XAML 中,没有键意味着默认情况下,它用于所有 FieldPropertyInfo 类型。 有没有办法在没有键的情况下将其添加到代码中的资源中,或者有没有办法使用键并仍然在所有 FieldPropertyInfo 类型上使用它?

以下是到目前为止我在 C# 中所做的工作:

HierarchicalDataTemplate fieldPropertyTemplate = new HierarchicalDataTemplate("FieldProperyInfo");
fieldPropertyTemplate.ItemsSource = new Binding("Value.Values");
this.Resources.Add(null, fieldPropertyTemplate);

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

从没有密钥的代码创建 XAML 资源

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

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

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