2010-08-13 13 views
5

vs WPF dünyaya oldukça yeni ve ben bir ItemsControl yılında şablon öğeleri ile bazı sorunlarım var. Ne gereken bir ItemsControl (veya benzeri) içindeki şablon elemanları (çoğunlukla düğmeleri) etmektir. http://img444.imageshack.us/img444/2167/itemscontrolnottemplate.gifıtemtemplate: ListBox ItemsControl

ItemsControl ya Düğme şablonu uygulamak vermedi:

Aşağıdaki XAML kodu kullanıyorum olursa ...

<ItemsControl> 
    <ItemsControl.ItemTemplate> 
     <DataTemplate DataType="{x:Type Button}"> 
       <Border BorderBrush="AliceBlue" 
         BorderThickness="3"> 
        <TextBlock Text="Templated!"/>   
       </Border> 
     </DataTemplate> 
    </ItemsControl.ItemTemplate> 
    <Button>Not templated</Button> 
    <TextBlock>Text not templated</TextBlock> 
</ItemsControl> 

... Bu sonuç almak ne de TextBlock kontrole. Böyle bir ListBox içine ItemsControl değiştirirseniz:

<ListBox> 
    <ListBox.ItemTemplate> 
     <DataTemplate DataType="{x:Type Button}"> 
       <Border BorderBrush="AliceBlue" 
         BorderThickness="3"> 
        <TextBlock Text="Templated!"/>   
       </Border> 
     </DataTemplate> 
    </ListBox.ItemTemplate> 
    <Button>Not templated</Button> 
    <TextBlock>Text not templated</TextBlock> 
</ListBox> 

... Ben bu sonucu alıyorum sonra:

img814.imageshack.us/img814/6204/listboxtoomuchtemplatin.gif Şimdi şablonu (I Düğme sadece olmak DataType set bile) İKİ çocuk kontrolleri uygulanır.

cevap

15

Size yapmaya çalıştığınız şeyi anlaması, ancak bu yardımcı olur görmek zor ...

Düz zaten UI öğeleri iseniz eski ItemsControl bir kap içinde kendi çocukları sarın olmayacaktır. Diğer yandan, ListBox, çocuklarının ListBoxItem numaralı telefondan paketlenmesini gerektirir. öğe sarılı ise

ardından ItemTemplate uygulanacaktır. Öğe sarılmamışsa, ItemTemplate da mevcut olmayabilir.

Neredeyse her zaman veri öğelerini UI öğelerine değil, ItemsControl ürününe eklemek istiyorsunuz. Daha sonra, bunları oluşturmak için hangi UI öğelerinin kullanıldığını tanımlamak üzere bu veri öğeleriyle DataTemplate s'yi ilişkilendirin.

Senin en uç hedefi açıklayan ayrıca yardım için gerekli olacağını düşünüyorum.