2009-09-11 10 views

risposta

10

ItemTemplate viene utilizzato per specificare un DataTemplate utilizzato per rendere l'articolo nel vostro ListBox. ItemPanelTemplate viene utilizzato per specificare il pannello utilizzato per organizzare i figli del ListBox.

Ad esempio, se il ListBox è associato a una ObservableCollection, è necessario specificare un DataTemplate per indicare come eseguire il rendering di ciascun oggetto Persona.

Ciò organizzerà verticalmente ogni elemento perché ListBox ha utilizzato uno StackPanel per impostazione predefinita. Se si desidera modificare questo comportamento, utilizzare la proprietà ItemPanelTemplate:

<ListBox> 
    <ListBox.ItemsPanel> 
    <ItemsPanelTemplate> 
     <StackPanel Orientation="Horizontal"/> 
    </ItemsPanelTemplate>    
    </ListBox.ItemsPanel> 
</ListBox> 

si può anche cambiare lo StackPanel a qualsiasi altro pannello (WrapPanel per esempio).

20

Vorrei cercare di spiegare questo con l'esempio:

<ListBox ItemsSource="{Binding}"> 
    <ListBox.ItemTemplate> 
    <DataTemplate> 
     <Border Background="SteelBlue" Padding="5" BorderBrush="Black" 
     BorderThickness="1" Margin="0,2"> 
     <TextBlock Text="{Binding}"/> 
     </Border> 
    </DataTemplate> 
    </ListBox.ItemTemplate> 
    <ListBox.ItemsPanel> 
    <ItemsPanelTemplate> 
     <StackPanel Background="DarkKhaki"/> 
    </ItemsPanelTemplate> 
    </ListBox.ItemsPanel> 
</ListBox> 

E il risultato:

WPF ListBox templates example

Il ItemTemplate determina il layout di ogni voce dell'elenco. D'altra parte il ItemsPanel è il pannello che conterrà i singoli elementi. Data la definizione di cui sopra l'albero visivo sarà qualcosa di simile a questo:

<StackPanel> 
    <Border> 
    <TextBlock Text="Alpha"/> 
    </Border> 
    <Border> 
    <TextBlock Text="Beta"/> 
    </Border> 
    .... 
</StackPanel> 
Problemi correlati