如何在ItemsControl中给一个项添加边框?

10
我试图给每个项目控件设置边框。以下是我的XAML代码。但这并不起作用。
<ItemsControl.ItemContainerStyle>
    <Style>
        <Setter Property="Control.BorderThickness" Value="5" />
        <Setter Property="Control.BorderBrush" Value="Black" />
    </Style>
</ItemsControl.ItemContainerStyle>
2个回答

27

ItemsControl 中的容器是一个 ContentPresenter 而不是控件,因此这种样式将不起任何作用。您可以创建一个包含 BorderItemsTemplate

或者您可以在 ItemContainerStyle 中更改 ContentTemplate

<ItemsControl.ItemContainerStyle>
    <Style TargetType="ContentPresenter">
        <Setter Property="ContentTemplate">
            <Setter.Value>
                <DataTemplate>
                    <Border BorderBrush="Black" BorderThickness="5">
                        <ContentPresenter Content="{Binding}"/>
                    </Border>
                </DataTemplate>
            </Setter.Value>
        </Setter>
    </Style>
</ItemsControl.ItemContainerStyle>

(注意:在这个意义上,它完全相同,因此我会使用ItemTemplate,因为它要简短得多,可以节省三个标记(StyleSetterSetter.Value))


“完全相同的事情”是指H.B.所说的ItemsControl.ItemsTemplate会设置每个项目容器的ContentTemplate。这意味着,如果两者都使用,ItemTemplate将完全替换ItemContainerStyleContentTemplate值。 - Artfunkel

2
请参考以下有关BorderThickness[BorderBrush][1]的说明:

此属性仅对使用BorderThickness属性作为参数的控件有影响。对于其他控件,此属性没有影响。

此属性仅适用于使用BorderBrush属性作为参数的控件。对于其他控件,此属性没有影响。

因此,您实际上需要这样的控件,例如边框(Border),其中可以包含您需要显示的任何内容。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接