【问题标题】:WPF DataGrid - Transparent Horizontal Grid Lines except for bottom horizontal line of the last rowWPF DataGrid - 透明的水平网格线,最后一行的底部水平线除外
【发布时间】:2019-10-09 17:02:43
【问题描述】:

我对 C# 或 XAML 不太熟悉,但我有一个 DataGrid,它将水平网格线设置为透明。但是,我需要将 DataGrid 的最后一行的底部网格线设为实线而不是透明的。

DataGrid 位于网格内,我尝试将边框粗细值设置为“0,0,0,1”,以防它可能会起作用,但没有。 试图添加一些条件语句来检查DataGrid的最后一行,但是代码的构建方式并没有特别的方法来确定它是否是最后一行。

DataGrid 的当前样式

<Style x:Key="OrderViewDataGridStyle" TargetType="DataGrid">
    <Setter Property="SelectionMode"  Value="Single"/>
    <Setter Property="SelectionUnit" Value="FullRow" />
    <Setter Property="CanUserSortColumns" Value="True"/>
    <Setter Property="ScrollViewer.CanContentScroll" Value="True"/>
    <Setter Property="ScrollViewer.VerticalScrollBarVisibility" Value="Auto"/>
    <Setter Property="ScrollViewer.HorizontalScrollBarVisibility" Value="Auto"/>
    <Setter Property="AlternationCount" Value="2"/>
    <Setter Property="IsReadOnly" Value="True"/>
    <Setter Property="HorizontalGridLinesBrush" Value="Transparent"/>
    <Setter Property="VerticalGridLinesBrush" Value="#CDCDCD"/>
    <Setter Property="ColumnHeaderStyle" Value="{StaticResource DatagridColumnHeaderStyle}"/>
    <Setter Property="ItemContainerStyle" Value="{StaticResource OrderViewDatagridRowStyle}"/>
    <Setter Property="CanUserReorderColumns" Value="False"/>
    <Setter Property="CanUserResizeColumns" Value="True"/>
    <Setter Property="Background" Value="#F6F6F6"/>
    <Setter Property="BorderBrush" Value="#CDCDCD"/>
    <Setter Property="AutoGenerateColumns" Value="False"/>
    <Setter Property="RowHeaderWidth" Value="0" />
    <Setter Property="HorizontalAlignment"  Value="Stretch" />
    <Setter Property="VerticalAlignment"  Value="Stretch" />
    <Setter Property="VirtualizingStackPanel.VirtualizationMode"  Value="Recycling" />
    <Setter Property="VirtualizingStackPanel.IsVirtualizing"  Value="True" />
    <Setter Property="EnableRowVirtualization" Value="True"/>
    <Setter Property="EnableColumnVirtualization" Value="False"/>
</Style>

数据网格

<Grid>
  <Grid>
    <Border>
      ...
    <Border/>
    <DataGrid>
      <DataGrid.Columns>
        ...
      <DataGrid.Columns/>
    <DataGrid/>
    <DataGrid>
      <DataGrid.Columns>
        ...
      <DataGrid.Columns/>
    <DataGrid/>
    <DataGrid>
      <DataGrid.Columns>
        ...
      <DataGrid.Columns/>
    <DataGrid/>
  <Grid/>
<Grid/>

我正在尝试看看是否有更好的方法可以在没有条件 xaml 语句的情况下实现最后一行底部的一行。

【问题讨论】:

  • 你说的是显示的最后一行,还是数据中的最后一行?
  • 显示的最后一行。所有行都显示得很好。这是我遇到问题的水平网格线。目前它设置为透明,但我需要它是透明的,除了最后一行。我正在尝试显示最后一行的底部网格线。

标签: c# wpf xaml


【解决方案1】:
<Grid>
    <Grid.ColumnDefinitions>
        <ColumnDefinition/>
        <ColumnDefinition/>
    </Grid.ColumnDefinitions>
    <Grid.RowDefinitions>
        <RowDefinition/>
        <RowDefinition/>
    </Grid.RowDefinitions>
    <DataGrid GridLinesVisibility="Vertical"
              BorderBrush="Black"
              Background="White"
              BorderThickness="0 0 0 1"
              DataContext="{Binding ElementName=win}"
              ItemsSource="{Binding itemList}"
              CanUserAddRows="False"
              HorizontalAlignment="Left">
    </DataGrid>
</Grid>

【讨论】:

  • 试图实现它,它仍然缺少底部边框。我还尝试将第二个网格包裹在边框内,但边框似乎缩小了;需要调整大小。
【解决方案2】:

你可以将数据网格本身包裹在边框中吗?

<Grid>
  <Border BorderBrush="#CDCDCD" BorderThickness="0,0,0,1">
  <DataGrid>
    <DataGrid.Columns>
      ...
    <DataGrid.Columns/>
  <DataGrid/>
<Border/>
<Grid/>

【讨论】:

  • 每次构建新行时都会调用 DataGrid,所以我不能用边框包裹它。如果我这样做了,它会给每一行一个底部网格线。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-02-11
  • 2017-04-04
  • 2011-09-25
  • 1970-01-01
相关资源
最近更新 更多