In WPF Listbox
, ich bin mit diesen 2 Begriffe verwirrt: ItemTemplate
und ItemContainerStyle
Kann mir jemand erklären, mehr?Was ist der Unterschied zwischen ItemTemplate und ItemContainerStyle in einer WPF-ListBox?
Antwort
Die ItemTemplate dient zum Formatieren des Inhalts Ihres Datenelements. Sie verwenden es, um Datenfelder zu binden, Anzeigestrings zu formatieren und so weiter. Es legt fest, wie die Daten dargestellt werden.
Die ItemContainerStyle dient zum Formatieren des Containers des Datenelements. In einem Listenfeld wäre dies ein ListBoxItem. Das Styling wirkt sich auf das Auswahlverhalten oder die Hintergrundfarbe aus. Es bestimmt Stil und UX des Displays.
Die MSDN-Seite für ItemContainerStyle, oben verbunden ist, hat ein ziemlich gutes Beispiel zeigt einige Unterschiede:
<!--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>
Die ItemContainerStyle nur ein Wrapper für die Datatemplate, so dass ein gemeinsames Element Stil angewendet werden kann, zu verschiedenen Datenlayouts.
Auch aus this answer to "DataTemplate vs ItemContainerStyle":
Sie können in der ItemTemplate alle Ihre Styling tun, aber die ItemContentStyle hat VisualStates, die die Opazität auf der Maus über/Behinderte/kontrollieren usw.
Wenn Sie möchten, Ändern Sie diese Opazitätsstatusänderungen, oder wenn Sie eine andere Containerform als ein Rechteck, z. B. ein Dreieck, möchten, müssen Sie den standardmäßigen ItemContainerStyle überschreiben.
I * stark * schlage vor, Sie machen es immer deutlicher, dass der Text 'Sie Ihr Styling alles tun können, in der ItemTemplate aber Der ItemContentStyle verfügt über VisualStates, die die Deckkraft bei MouseOver/Disabled/Selected 'und' Wenn Sie diese Opazitätszustandsänderungen ändern möchten, oder wenn Sie eine andere Containerform als ein Rechteck, z. B. ein Dreieck, möchten muss den Standard-ItemContainerStyle überschreiben. "wurde von dem angegebenen Link kopiert; Sie haben in letzter Zeit Plagiate geplündert, was man als solche ansehen könnte. – LittleBobbyTables
Deshalb habe ich den Link in meine Antwort eingefügt. Ich habe es deutlicher gemacht, dass dies jetzt von der Website genommen wird. – Jeff
Wirklich ein Downvote? Ich referenziert den Link Mann ?? Bitte lesen Sie meine gesamte Post vor dem Downvote. – Jeff
Möglicherweise verwandte: http://stackoverflow.com/questions/5978358/datatemplate-vs-itemcontainerstyle – LittleBobbyTables