2013-05-14 16 views

Odpowiedz

33

Do stylizacji sposobu wyświetlania zawartości elementu danych służy ItemTemplate. Używa się go do wiązania pól danych, formatowania ciągów wyświetlania i tak dalej. Określa sposób prezentacji danych.

Model ItemContainerStyle służy do stylizowania kontenera elementu danych. W polu listy byłby to obiekt ListBoxItem. Stylizacja wpływa na takie rzeczy, jak zachowanie w selekcji czy kolor tła. Określa styl i UX wyświetlacza.

Na stronie MSDN dla ItemContainerStyle, połączone powyżej, ma całkiem dobry przykład pokazujący pewne różnice:

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

ItemContainerStyle tylko nakładką na DataTemplate tak, że wspólny styl element może być stosowany do różnych układów danych.

Również z this answer to "DataTemplate vs ItemContainerStyle":

można zrobić całą swoją stylizację w ItemTemplate ale ItemContentStyle ma VisualStates które kontrolują krycie na myszy nad/niepełnosprawnych/wybrany itp

Jeśli chcesz zmień zmiany stanu krycia lub jeśli chcesz mieć inny kształt kontenera niż prostokąt, na przykład trójkąt, musisz zastąpić domyślny ItemContainerStyle.

+2

I * zdecydowanie * Proponuję uczynić go bardziej oczywiste, że tekst 'można zrobić całą swoją stylizację w ItemTemplate ale ItemContentStyle ma VisualStates, które kontrolują Opacity na myszy over/disabled/selected 'i' Jeśli chcesz zmienić te zmiany stanu krycia, lub jeśli chcesz mieć inny kształt kontenera niż prostokąt, na przykład trójkąt, to muszą zastąpić domyślny ItemContainerStyle. "został skopiowany z podanego linku; Ostatnio zajmują się plagiatem, a to właśnie można uznać za takie. – LittleBobbyTables

+0

Dlatego włączyłem link w mojej odpowiedzi. Uczyniłem to bardziej zrozumiałym, że zostało to zrobione teraz z witryny. – Jeff

+0

Naprawdę przegłosowanie? Odniosłem się do tego linku? Przeczytaj mój CAŁĄ wiadomość, zanim dojdziesz do rozstrzygnięcia. – Jeff