2008-09-26 8 views
7

Czy istnieje sposób na dodanie zasobu do ResourceDictionary z kodu bez podawania klucza zasobu?Tworzenie zasobu XAML z kodu bez klucza

Na przykład, mam tego zasobu w XAML:

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

trzeba utworzyć ten zasób dynamicznie z kodu i dodać go do TreeView ResourceDictionary. Jednak w XAML bez klucza oznacza to, że jest on domyślnie używany dla wszystkich typów FieldPropertyInfo. Czy istnieje sposób dodania go do zasobu w kodzie bez klucza lub czy istnieje sposób, w jaki mogę użyć klucza i nadal używać go we wszystkich typach FieldPropertyInfo?

Oto, co robiłem w C# do tej pory:

HierarchicalDataTemplate fieldPropertyTemplate = new HierarchicalDataTemplate("FieldProperyInfo"); 

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

this.Resources.Add(null, fieldPropertyTemplate); 

Oczywiście, dodając zasób do ResourceDictionary klucz zerowy nie działa.

Odpowiedz

8

Użyj typ, który chcesz zastosować szablon jako kluczowe:

HierarchicalDataTemplate fieldPropertyTemplate = new 
    HierarchicalDataTemplate("FieldProperyInfo"); 

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

Powodem Twój kod nie działa Twój nie zostały faktycznie ustawienie wiązania. Musisz wywołać SetBinding, z właściwością, do której ma zostać przypisane powiązanie.

0

Użyj typ, który chcesz zastosować szablon jako klucz:

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

Jak z szablonu powyżej podać typ. Musisz podać nazwę lub typ.

+0

Chociaż to działa, szablon nie jest używany przez TreeView. Wygląda na to, że coś o kluczu Resource uniemożliwia jego użycie. –

+0

@Orion: Widziałeś moją odpowiedź i całkowicie zredagowałeś swoją, by skopiować moją? Naprawdę elegancko ... –

Powiązane problemy