2010-08-13 6 views
5

Ich bin ziemlich neu in der Welt WPF und ich habe einige Probleme mit Templating Artikel in einem ItemsControl. Was ich brauche, ist Vorlagenelemente (meist Tasten) in einem ItemsControl (oder dergleichen).ItemTemplate: ListBox vs ItemsControl

Wenn ich den folgenden XAML-Code bin mit ...

<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> 

... ich dieses Ergebnis: http://img444.imageshack.us/img444/2167/itemscontrolnottemplate.gif

Die Items nicht die Vorlage entweder auf den Knopf zutraf noch zu TextBlock Kontrolle. Wenn ich ändern, um die Items in eine ListBox wie folgt aus:

<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> 

... dann erhalte ich dieses Ergebnis: img814.imageshack.us/img814/6204/listboxtoomuchtemplatin.gif

Nun wird die Vorlage auf BOTH der untergeordneten Steuerelemente angewendet (auch wenn ich den DataType nur auf Button setze).

Antwort

15

Es ist schwer zu folgern, was Sie zu tun versuchen, aber sehen, ob das hilft ...

Eine einfache alte ItemsControl nicht seine Kinder in einem Behälter wickeln, wenn sie UI-Elemente sind bereits. Eine ListBox erfordert andererseits, dass ihre Kinder in eine ListBoxItem gewickelt werden.

Wenn der Artikel verpackt ist, wird ItemTemplate angewendet. Wenn der Artikel nicht verpackt ist, kann die ItemTemplate auch nicht existieren.

Sie möchten fast immer Daten Elemente zu Ihrem ItemsControl, nicht UI-Elemente hinzufügen. Dann verknüpfen Sie DataTemplate s mit diesen Datenelementen, um zu definieren, welche UI-Elemente verwendet werden, um sie zu rendern.

Ich denke, erklären Ihr Endziel wäre notwendig, um weiter zu helfen.