如果我使用ListBox进行数据绑定,则列表框会为每个项生成一个listboxitem,对于组合框和comboBoxItem也是如此。 我的问题是 - 我如何为给定的ItemsControl自己设置它? (例如,将包含元素设为边框)?
答案 0 :(得分:1)
用于包装每个项目的默认项目是ContentPresenter
我不确定你为什么要覆盖它,因为它没有视觉外观或特定的行为会弄乱你的UI。
如果要在ItemTemplate
对象中包装每个项目,可以设置Border
<ItemsControl.ItemTemplate>
<DataTemplate>
<Border BorderBrush="Blue" BorderThickness="2">
<TextBlock Text="{Binding }" />
</Border>
</DataTemplate>
</ItemsControl.ItemTemplate>
如果您要将任何特定样式应用于ItemContainerStyle
ContentPresenter
<ItemsControl.ItemContainerStyle>
<Style>
<Setter Property="Grid.Column" Value="{Binding ColumnIndex}" />
<Setter Property="Grid.Row" Value="{Binding RowIndex}" />
</Style>
</ItemsControl.ItemContainerStyle>
答案 1 :(得分:0)
用ILSpy挖了一点之后 -
显然魔术是在
中完成的 protected override DependencyObject GetContainerForItemOverride()
{
return new ListBoxItem();
}
这是ListBox所做的事情 - 在我的控制下我也应该覆盖它。