なぜ ListBox 内で ListBoxItem を使用するのか疑問に思っています。データバインディングを行っているときに、ListBoxItem が必要ないことがわかりました。場合によっては、それがなくてもうまく機能することがわかりました。
その理由は何ですか?ハードコードされたものだけですか?
なぜ ListBox 内で ListBoxItem を使用するのか疑問に思っています。データバインディングを行っているときに、ListBoxItem が必要ないことがわかりました。場合によっては、それがなくてもうまく機能することがわかりました。
その理由は何ですか?ハードコードされたものだけですか?
を使用しなくてもListBoxItem
(そのとおりです。項目を定義するために使用する理由はあまりありません)、ListBox
コントロールは引き続きそれを使用します。つまり、リスト内の各項目のデータ テンプレートをラップするために使用します。XAML コードでこれを参照する機会が 1 度あるのは、アイテム コンテナーのスタイルを設定するときですItemContainerStyle
。
<ListBox.ItemContainerStyle>
<Style TargetType="ListBoxItem">
<Setter Property="HorizontalContentAlignment" Value="Stretch" />
</Style>
</ListBox.ItemContainerStyle>
上記は一般的な例です。ListBox 内の項目を水平方向に引き伸ばしたい場合は、その方法を使用する必要があるためです。(含まれている ListBoxItem はデフォルトで左揃えであるため、項目 DataTemplate を Stretch に設定するだけでは機能しません。)
これが完全な例です。
<ListBox ItemsSource="{Binding Letters}">
<ListBox.ItemTemplate>
<DataTemplate>
<Grid Background="Green">
<TextBlock Text="{Binding}" Foreground="White" />
</Grid>
</DataTemplate>
</ListBox.ItemTemplate>
<!--
<ListBox.ItemContainerStyle>
<Style TargetType="ListBoxItem">
<Setter Property="HorizontalContentAlignment" Value="Stretch" />
</Style>
</ListBox.ItemContainerStyle>
-->
</ListBox>
これは次のように表示されます。
のコメントを外すItemContainerStyle
と、次のようになります。