Creazione di una risorsa XAML da codice senza chiave
-
02-07-2019 - |
Domanda
C'è un modo per aggiungere una risorsa a un ResourceDictionary dal codice senza dargli una chiave di risorsa?
Ad esempio, ho questa risorsa in XAML:
<TreeView.Resources>
<HierarchicalDataTemplate DataType="{x:Type xbap:FieldPropertyInfo}"
ItemsSource="{Binding Path=Value.Values}">
<TextBlock Text="{Binding Path=Name}" />
<HierarchicalDataTemplate>
</TreeView.Resources>
Devo creare questa risorsa in modo dinamico dal codice e aggiungerla a TreeView ResourceDictionary. Tuttavia, in XAML senza chiave significa che viene utilizzato, per impostazione predefinita, per tutti i tipi di FieldPropertyInfo. C'è un modo per aggiungerlo alla risorsa nel codice senza avere una chiave o c'è un modo in cui posso usare una chiave e averla ancora utilizzata su tutti i tipi FieldPropertyInfo?
Ecco cosa ho fatto finora in C #:
HierarchicalDataTemplate fieldPropertyTemplate = new HierarchicalDataTemplate("FieldProperyInfo");
fieldPropertyTemplate.ItemsSource = new Binding("Value.Values");
this.Resources.Add(null, fieldPropertyTemplate);
Ovviamente, aggiungendo una risorsa a ResourceDictionary la chiave null non funziona.
Soluzione
Usa il tipo a cui vuoi applicare il modello come chiave:
HierarchicalDataTemplate fieldPropertyTemplate = new
HierarchicalDataTemplate("FieldProperyInfo");
fieldPropertyTemplate.SetBinding(
HierarchialDataTemplate.ItemSourceProperty,
new Binding("Value.Values");
this.Resources.Add(FieldPropertyInfo.GetType(), fieldPropertyTemplate);
Il motivo per cui il tuo codice non funzionava era che il tuo non stava effettivamente impostando l'associazione . È necessario chiamare SetBinding, con la proprietà a cui si desidera associare l'associazione.
Altri suggerimenti
Usa il tipo a cui vuoi applicare il modello come chiave:
this.Resources.Add(FieldPropertyInfo.GetType(), fieldPropertyTemplate);
Come per il tuo modello sopra, fornisci un tipo. Devi fornire un nome o un tipo.