2008-09-26 3 views
7

Existe-t-il un moyen d'ajouter une ressource à ResourceDictionary à partir d'un code sans lui donner de clé de ressource?Création d'une ressource XAML à partir d'un code sans clé

Par exemple, j'ai cette ressource en XAML:

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

Je dois créer cette ressource dynamique à partir du code et l'ajouter à la TreeView ResourceDictionary. Cependant, en XAML n'ayant aucune clé signifie qu'il est utilisé, par défaut, pour tous les types FieldPropertyInfo. Existe-t-il un moyen de l'ajouter à la ressource dans le code sans avoir de clé ou existe-t-il un moyen d'utiliser une clé tout en l'utilisant sur tous les types FieldPropertyInfo?

Voici ce que je l'ai fait en C# jusqu'à présent:

HierarchicalDataTemplate fieldPropertyTemplate = new HierarchicalDataTemplate("FieldProperyInfo"); 

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

this.Resources.Add(null, fieldPropertyTemplate); 

De toute évidence, l'ajout d'une ressource à la ResourceDictionary la clé null ne fonctionne pas.

Répondre

8

Utilisez le type que vous voulez que le modèle à appliquer comme la clé:

HierarchicalDataTemplate fieldPropertyTemplate = new 
    HierarchicalDataTemplate("FieldProperyInfo"); 

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

La raison pour laquelle votre code ne fonctionnait pas était votre ne déclenchaient pas de fait la obligatoire. Vous devez appeler SetBinding, avec la propriété à laquelle vous voulez que la liaison soit liée.

0

Utilisez le type que vous voulez que le modèle à appliquer comme la clé:

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

Comme votre modèle ci-dessus, vous fournissez un type. Vous devez soit fournir un nom ou un type.

+0

Bien que cela fonctionne, le modèle n'est pas utilisé par TreeView. On dirait que quelque chose à propos de la clé de ressource empêche son utilisation. –

+0

@Orion: Vous avez donc vu ma réponse, et j'ai complètement modifié la vôtre pour copier la mienne? Vraiment chic ... –

Questions connexes