2008-09-26 21 views
7

¿Hay alguna forma de agregar un recurso a un ResourceDictionary desde el código sin darle una clave de recurso?Creación de un recurso XAML desde un código sin clave

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 de forma dinámica a partir de código y agregarlo al TreeView ResourceDictionary. Sin embargo, en XAML que no tiene clave significa que se usa, de forma predeterminada, para todos los tipos de FieldPropertyInfo. ¿Hay alguna manera de agregarlo al recurso en el código sin tener una clave o hay alguna manera de que pueda usar una clave y aún así utilizarla en todos los tipos de FieldPropertyInfo?

Esto es lo que he hecho en C# hasta el momento:

HierarchicalDataTemplate fieldPropertyTemplate = new HierarchicalDataTemplate("FieldProperyInfo"); 

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

this.Resources.Add(null, fieldPropertyTemplate); 

Obviamente, la adición de un recurso a la ResourceDictionary la hipótesis nula de teclas no funciona.

Respuesta

8

Utilice el tipo que desea que la plantilla que se aplicará como la 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 eran en realidad el establecimiento de las vinculante. Debe llamar a SetBinding, con la propiedad a la que desea que esté vinculado el enlace.

0

Utilice el tipo que desea que la plantilla que se aplicará como la clave:

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

Al igual que con la plantilla por encima de usted proporciona un tipo. Tienes que proporcionar un nombre o un tipo.

+0

Aunque esto se ejecuta, la TreeView no utiliza la plantilla. Parece que algo sobre la tecla Recurso impide que se use. –

+0

@Orion: ¿Así que vio mi respuesta y editó por completo la suya para copiar la mía? Muy elegante ... –

Cuestiones relacionadas