2008-09-26 12 views
7

Bir kaynak anahtarını vermeden, bir ResourceDictionary kaynağına kaynak eklemenin bir yolu var mı?Anahtarsız Bir XAML Kaynağının Oluşturulması Bir Anahtar Olmadan

Mesela ben XAML Bu kaynağı vardır:

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

ben kodundan dinamik olarak bu kaynak oluşturmak ve TreeView ResourceDictionary eklemek gerekir. Ancak, Anahtar içermeyen XAML'de, varsayılan olarak, tüm FieldPropertyInfo türleri için kullanıldığı anlamına gelir. Bir anahtar olmadan kodda kaynağa eklemek için bir yol var mı yoksa bir anahtar kullanabileceğim bir yolu var ve hala tüm FieldPropertyInfo türlerinde kullanılan var mı?

Ben bugüne kadar C# yaptık ne: Açıkçası

HierarchicalDataTemplate fieldPropertyTemplate = new HierarchicalDataTemplate("FieldProperyInfo"); 

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

this.Resources.Add(null, fieldPropertyTemplate); 

, anahtar boş çalışmaz ResourceDictionary kaynak eklerken.

cevap

8

şablon anahtarı olarak uygulamak istediğiniz türünü kullanın:

HierarchicalDataTemplate fieldPropertyTemplate = new 
    HierarchicalDataTemplate("FieldProperyInfo"); 

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

kodunuzu oldu çalışan değildi sebebi senin aslında bağlayıcı ayarı değildi. Bağlantının ciltlenmesini istediğiniz özelliği kullanarak SetBinding öğesini çağırmanız gerekir.

0

şablon anahtar olarak uygulamak istediğiniz türünü kullanın: Bir tipin sağlamak yukarıdaki şablonla gibi

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

. Bir isim ya da tip belirtmeniz gerekiyor.

+0

Buna rağmen, şablon TreeView tarafından kullanılmıyor. Kaynak anahtarı ile ilgili bir şeylerin kullanılmasını engelliyor gibi görünüyor. –

+0

@Orion: Cevabımı gördün ve benimkini kopyalamak için tamamen düzenledin mi? Gerçekten klas ... –