2013-05-14 7 views

risposta

33

Il ItemTemplate è per lo stile come viene visualizzato il contenuto dell'elemento di dati. Lo si utilizza per associare campi dati, formattare le stringhe di visualizzazione e così via. Determina come vengono presentati i dati.

Il ItemContainerStyle è per lo styling del contenitore dell'elemento di dati. In una casella di riepilogo, questo sarebbe un ListBoxItem. Lo stile qui riguarda cose come il comportamento di selezione o il colore di sfondo. Determina lo stile e la UX del display.

La pagina di MSDN per ItemContainerStyle, linkata sopra, ha un buon esempio che mostra alcune differenze:

<!--Use the ItemTemplate to set a DataTemplate to define 
     the visualization of the data objects. This DataTemplate 
     specifies that each data object appears with the Proriity 
     and TaskName on top of a silver ellipse.--> 
    <ItemsControl.ItemTemplate> 
    <DataTemplate> 
     <DataTemplate.Resources> 
     <Style TargetType="TextBlock"> 
      <Setter Property="FontSize" Value="18"/> 
      <Setter Property="HorizontalAlignment" Value="Center"/> 
     </Style> 
     </DataTemplate.Resources> 
     <Grid> 
     <Ellipse Fill="Silver"/> 
     <StackPanel> 
      <TextBlock Margin="3,3,3,0" 
        Text="{Binding Path=Priority}"/> 
      <TextBlock Margin="3,0,3,7" 
        Text="{Binding Path=TaskName}"/> 
     </StackPanel> 
     </Grid> 
    </DataTemplate> 
    </ItemsControl.ItemTemplate> 
    <!--Use the ItemContainerStyle property to specify the appearance 
     of the element that contains the data. This ItemContainerStyle 
     gives each item container a margin and a width. There is also 
     a trigger that sets a tooltip that shows the description of 
     the data object when the mouse hovers over the item container.--> 
    <ItemsControl.ItemContainerStyle> 
    <Style> 
     <Setter Property="Control.Width" Value="100"/> 
     <Setter Property="Control.Margin" Value="5"/> 
     <Style.Triggers> 
     <Trigger Property="Control.IsMouseOver" Value="True"> 
      <Setter Property="Control.ToolTip" 
        Value="{Binding RelativeSource={x:Static RelativeSource.Self}, 
          Path=Content.Description}"/> 
     </Trigger> 
     </Style.Triggers> 
    </Style> 
    </ItemsControl.ItemContainerStyle> 
8

L'ItemContainerStyle solo un wrapper per il DataTemplate in modo che può essere applicato uno stile comune oggetto a diversi layout di dati.

Inoltre, da this answer to "DataTemplate vs ItemContainerStyle":

Si può fare tutto il tuo stile nel ItemTemplate, ma l'ItemContentStyle ha VisualStates che controllano l'opacità al passaggio del mouse/disabili/selezionato ecc

Se si desidera cambia le modifiche allo stato di opacità, o se vuoi una forma Container diversa da un rettangolo, ad esempio un triangolo, dovrai sostituire il ItemContainerStyle predefinito.

+2

I * fortemente * suggerisco di fare è più evidente che il testo 'si può fare tutto il tuo stile nel ItemTemplate, ma the ItemContentStyle ha VisualStates che controllano l'opacità sul mouse sopra/disabilitato/selezionato 'e' Se vuoi cambiare le modifiche allo stato di opacità, o se vuoi una forma Container diversa da un rettangolo, ad esempio un triangolo, allora è necessario sovrascrivere il valore predefinito ItemContainerStyle. è stato copiato dal collegamento fornito; ultimamente si sono scontrati con il plagio, il che è ciò che questo potrebbe essere visto come. – LittleBobbyTables

+0

Ecco perché ho incluso il link nella mia risposta. Ho reso più chiaro questo è preso dal sito ora. – Jeff

+0

Davvero un downvote? Ho fatto riferimento al link uomo ?? Si prega di leggere il mio INTERO post prima del downvote. – Jeff

Problemi correlati