【问题标题】:Alternate Grid row colors?备用网格行颜色?
【发布时间】:2012-03-26 19:15:01
【问题描述】:

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

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

【问题讨论】:

  • Grid 是一个布局项 - 对于数据,您应该使用内置交替行着色的 DataGrid
  • @ChrisF:我不需要任何数据。只是一个网格领跑者。
  • @serhio - 展示您想要实现的目标的模型可能会有所帮助。
  • 其实对我来说是等于用什么控件,我真的可以用一个Datagrid...
  • 那么我建议您使用 DataGrid 并使用内置的备用行着色模板。 :)

标签: c# .net wpf xaml grid


【解决方案1】:

我能想到的唯一方法是手动使用 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 中没有对象,则没有任何东西可用于绘制背景,因此如果您想要这种行为,则必须将对象实际放置在网格内。
  • 考虑到您对使用 DataGrid 而不是 Grid 的评论,标记为答案。但是,我在 DataGrid 中显示一些空的行和列时遇到了一些问题……因为需要 DataSource……
  • @serhio - 只需将空对象添加到您的数据源。虽然如果我们知道您想要实现的目标会有所帮助。
  • 这对我来说效果很好,但因为我有不止一列,我需要指定 Grid.ColumnSpan 值。示例:
猜你喜欢
  • 1970-01-01
  • 2011-09-22
  • 1970-01-01
  • 2014-07-02
  • 1970-01-01
  • 2012-10-12
  • 1970-01-01
  • 2019-10-08
  • 2014-12-17
相关资源
最近更新 更多