2010-08-13 4 views
5

Je suis assez nouveau dans le monde de WPF et j'ai quelques problèmes avec les éléments de modèle dans un ItemsControl. Ce dont j'ai besoin est de modéliser des éléments (principalement des boutons) à l'intérieur d'un ItemsControl (ou similaire).ItemTemplate: ListBox vs ItemsControl

Si j'utilise le code XAML suivant ...

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

... J'obtenir ce résultat: http://img444.imageshack.us/img444/2167/itemscontrolnottemplate.gif

Le ItemsControl n'a pas appliqué le modèle soit le bouton ni au contrôle TextBlock. Si je change le ItemsControl dans un ListBox comme ceci:

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

... je reçois ce résultat: img814.imageshack.us/img814/6204/listboxtoomuchtemplatin.gif

Le modèle est maintenant appliqué à BOTH l'enfant contrôle (même si j'ai défini le DataType comme étant Button uniquement).

Répondre

15

Il est difficile de déduire ce que vous essayez de faire, mais si cela aide ...

Une plaine ancienne ItemsControl ne sera pas envelopper ses enfants dans un récipient si elles sont déjà des éléments UI. Par contre, un ListBox exige que ses enfants soient enveloppés dans un ListBoxItem.

Si l'élément est emballé, le ItemTemplate sera appliqué. Si l'élément n'est pas emballé, le ItemTemplate peut également ne pas exister.

Vous souhaitez presque toujours ajouter des données à vos articles ItemsControl, et non des éléments d'interface utilisateur. Vous associez ensuite DataTemplate à ces éléments de données pour définir les éléments d'interface utilisateur utilisés pour les rendre.

Je pense qu'il serait nécessaire d'expliquer votre objectif final pour vous aider.

Questions connexes