如何在数据绑定中设置itemscontrol的生成项?

时间:2012-03-15 13:25:59

标签: c# wpf data-binding

如果我使用ListBox进行数据绑定,则列表框会为每个项生成一个listboxitem,对于组合框和comboBoxItem也是如此。 我的问题是 - 我如何为给定的ItemsControl自己设置它? (例如,将包含元素设为边框)?

2 个答案:

答案 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所做的事情 - 在我的控制下我也应该覆盖它。