2013-05-14 1 views

Répondre

33

Le ItemTemplate permet de personnaliser le contenu de votre élément de données. Vous l'utilisez pour lier des champs de données, formater des chaînes d'affichage, etc. Il détermine comment les données sont présentées. Le ItemContainerStyle sert à styliser le conteneur de l'élément de données. Dans une zone de liste, ce serait un ListBoxItem. Le style affecte ici des choses comme le comportement de sélection ou la couleur d'arrière-plan. Il détermine le style et l'UX de l'affichage.

La page MSDN pour ItemContainerStyle, lié ci-dessus, a un très bon exemple montrant quelques différences:

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

Le ItemContainerStyle juste un wrapper pour le DataTemplate de sorte qu'un style d'élément commun peut être appliqué à différentes dispositions de données.

En outre, à partir this answer to "DataTemplate vs ItemContainerStyle":

Vous pouvez faire tout votre style dans le ItemTemplate mais le ItemContentStyle a VisualStates qui contrôlent l'Opacité de la souris/désactivé/sélectionné, etc.

Si vous voulez changez ces changements d'état d'opacité, ou si vous voulez une forme de conteneur autre qu'un rectangle, comme un triangle par exemple, alors vous devrez remplacer le ItemContainerStyle par défaut.

+2

I * fortement * vous suggère de rendre plus évident que le texte 'vous pouvez faire tout votre style dans le ItemTemplate mais le ItemContentStyle a des VisualStates qui contrôlent l'Opacité sur la souris sur/désactivé/sélectionné 'et' Si vous voulez changer ces changements d'état d'opacité, ou si vous voulez une forme de Conteneur autre qu'un rectangle, comme un triangle par exemple, alors vous aurez avoir à remplacer le ItemContainerStyle par défaut. »a été copié à partir du lien fourni; ils ont réprimé le plagiat ces derniers temps, ce qui pourrait être considéré comme cela. – LittleBobbyTables

+0

C'est pourquoi j'ai inclus le lien dans ma réponse. Je l'ai fait plus clair que cela est pris sur le site maintenant. – Jeff

+0

Vraiment un downvote? J'ai référencé le lien man? S'il vous plaît lire mon article complet avant downvote. – Jeff

Questions connexes