W WPF Listbox
, jestem mylony z tymi 2 pojęciami: ItemTemplate
i ItemContainerStyle
Czy ktoś może mi wyjaśnić więcej?Jaka jest różnica między ItemTemplate i ItemContainerStyle w ListBox WPF?
Odpowiedz
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>
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.
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
Dlatego włączyłem link w mojej odpowiedzi. Uczyniłem to bardziej zrozumiałym, że zostało to zrobione teraz z witryny. – Jeff
Naprawdę przegłosowanie? Odniosłem się do tego linku? Przeczytaj mój CAŁĄ wiadomość, zanim dojdziesz do rozstrzygnięcia. – Jeff
prawdopodobnie związane: http://stackoverflow.com/questions/5978358/datatemplate-vs-itemcontainerstyle – LittleBobbyTables