Pregunta

¿Hay alguna manera de agregar un recurso a un ResourceDictionary desde el código sin darle una clave de recurso?

Por ejemplo, tengo este recurso en XAML:

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

Necesito crear este recurso dinámicamente a partir del código y agregarlo al TreeView ResourceDictionary. Sin embargo, en XAML no tener clave significa que se usa, por defecto, para todos los tipos FieldPropertyInfo. ¿Hay alguna manera de agregarlo al recurso en el código sin tener una clave o hay una manera de que pueda usar una clave y aún así usarla en todos los tipos FieldPropertyInfo?

Esto es lo que he hecho en C # hasta ahora:

HierarchicalDataTemplate fieldPropertyTemplate = new HierarchicalDataTemplate("FieldProperyInfo");

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

this.Resources.Add(null, fieldPropertyTemplate);

Obviamente, al agregar un recurso a ResourceDictionary, la clave nula no funciona.

¿Fue útil?

Solución

Use el tipo al que desea que se aplique la plantilla como clave:

HierarchicalDataTemplate fieldPropertyTemplate = new 
    HierarchicalDataTemplate("FieldProperyInfo");

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

La razón por la que su código no funcionaba era su no estaba configurando el enlace . Debe llamar a SetBinding, con la propiedad a la que desea vincular el enlace.

Otros consejos

Use el tipo al que desea que se aplique la plantilla como clave:

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

Al igual que con su plantilla anterior, proporciona un tipo. Debe proporcionar un nombre o un tipo.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top