2010-08-13 16 views
5

Sono abbastanza nuovo per il mondo WPF e sto riscontrando alcuni problemi con gli elementi dei modelli in un ItemsControl. Ciò di cui ho bisogno è di elementi modello (principalmente pulsanti) all'interno di un ItemsControl (o simili).ItemTemplate: ListBox vs ItemsControl

Se sto utilizzando il seguente codice XAML ...

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

... ottengo questo risultato: http://img444.imageshack.us/img444/2167/itemscontrolnottemplate.gif

Il ItemsControl non ha applicato la mascherina per il pulsante né al controllo TextBlock. Se cambio la ItemsControl in un ListBox come questo:

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

... allora sto ottenendo questo risultato: img814.imageshack.us/img814/6204/listboxtoomuchtemplatin.gif

Ora il modello è applicato a ENTRAMBE i controlli figlio (anche se ho impostato il DataType per il Pulsante).

risposta

15

E 'difficile dedurre quello che stai cercando di fare, ma vedere se questo aiuta ...

Una pianura vecchio ItemsControl non si avvolgere i suoi bambini in un contenitore se sono già elementi dell'interfaccia utente. Un ListBox, d'altra parte, richiede che i suoi figli siano incapsulati in un ListBoxItem.

Se l'articolo è in ordine, verrà applicato il valore ItemTemplate. Se l'articolo non viene imballato, anche il ItemTemplate potrebbe non esistere.

Quasi sempre si desidera aggiungere dati articoli al numero ItemsControl, non agli elementi dell'interfaccia utente. Quindi associ DataTemplate s con quegli elementi dati per definire quali elementi dell'interfaccia utente vengono utilizzati per renderli.

Penso che spiegare il tuo obiettivo finale sarebbe necessario per aiutare ulteriormente.

Problemi correlati