WPFでは、次の 2 つの概念とListbox
混同し
ています。ItemTemplate
ItemContainerStyle
2 に答える
ItemTemplateは、データ項目のコンテンツがどのように表示されるかをスタイリングするためのものです。これを使用して、データ フィールドをバインドしたり、表示文字列をフォーマットしたりします。データの表示方法を決定します。
ItemContainerStyleは、データ項目のコンテナーをスタイリングするためのものです。リスト ボックスでは、これは ListBoxItem になります。ここでのスタイリングは、選択動作や背景色などに影響します。ディスプレイのスタイルとUXを決定します。
上にリンクされている ItemContainerStyle の MSDN ページには、いくつかの違いを示すかなり良い例があります。
<!--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 は、共通のアイテム スタイルをさまざまなデータ レイアウトに適用できるようにするための DataTemplate の単なるラッパーです。
また、「DataTemplate vs ItemContainerStyle」へのこの回答から:
ItemTemplate ですべてのスタイリングを行うことができますが、ItemContentStyle には、マウス オーバー/無効/選択などの不透明度を制御する VisualStates があります。
これらの不透明度の状態の変更を変更したい場合、または三角形などの長方形以外のコンテナ形状が必要な場合は、デフォルトの ItemContainerStyle をオーバーライドする必要があります。