交替显示网格行颜色?

6

在WPF的System.Windows.Controls.Grid中,是否可以附加样式或定义属性以交替显示行(或列)的颜色?

我需要让用户能够放置一个网格占位符(类似于CrystalReports)...它可以参数化网格,但网格(在View中)不包含任何数据。


3
"Grid"是布局项目 - 对于数据,您应该使用具有交替行颜色的内置"DataGrid"。 - ChrisF
@ChrisF:我不需要任何数据,只需要一个网格占位符。 - serhio
@serhio - 如果你展示一下你想要实现的模型,可能会有所帮助。 - ChrisF
实际上,对我来说使用什么控件都无所谓,我真的可以使用Datagrid... - serhio
那我建议您使用一个DataGrid,并使用内置的交替行颜色模板。 :) - Abbas
1个回答

5
我能想到的唯一方法是手动使用一个 Rectangle,可以在行内容之前声明,也可以将其 Z 顺序设置为推到后面:
<Grid Background="White">
    <Grid.RowDefinitions>
        <RowDefinition Height="Auto"/>
        <RowDefinition Height="Auto"/>
        <RowDefinition Height="Auto"/>
        <RowDefinition Height="Auto"/>
    </Grid.RowDefinitions>
    <Rectangle Grid.Row="0" Fill="AliceBlue" />
    <TextBlock Grid.Row="0" Text="Row 1" HorizontalAlignment="Center"/>
    <Rectangle Grid.Row="1" Fill="AntiqueWhite" />
    <TextBlock Grid.Row="1" Text="Row 2" HorizontalAlignment="Center"/>
    <Rectangle Grid.Row="2" Fill="AliceBlue" />
    <TextBlock Grid.Row="2" Text="Row 3" HorizontalAlignment="Center"/>
    <Rectangle Grid.Row="3" Fill="AntiqueWhite" />
    <TextBlock Grid.Row="3" Text="Row 4" HorizontalAlignment="Center"/>
</Grid>

您可以使用绑定将行号传递给转换器,以返回正确的颜色,而不是像我在这里硬编码。


+1 是因为 Grid 实际上并不像表格一样被渲染,而是一个容器对象,它定义了如何渲染放置在其中的项目。如果您的 Grid 中没有任何对象,则没有任何东西可用于绘制背景,因此如果您想要这种行为,您必须实际上将对象放置在 Grid 内部。 - Rachel
考虑到您的评论建议使用DataGrid而不是Grid,并将其标记为答案。然而,我在DataGrid中显示一些空行和列时遇到了一些问题...因为需要一个数据源... - serhio
@serhio - 只需向您的数据源添加空对象即可。不过,如果我们知道您想要实现什么,那会更有帮助。 - ChrisF
这对我很有效,但因为我有多列,所以需要指定Grid.ColumnSpan值。例如:<Rectangle Grid.Row="1" Grid.ColumnSpan="4" Fill="AliceBlue" /> - barrypicker

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