2

我目前正在使用 DataGrid 建立一个 WPF 窗口来保存一个表。绑定和更新工作正常,我也很鄙视样式,但在选择时遇到了麻烦。这是先决条件:

  • 表是只读的
  • 整行选择

这是我的表格的源代码:(是的,我知道我确实设置了 3 次选择颜色,一次用于 DataGrid,一次用于行,一次用于单元格。我认为其中一个可能会有所帮助,但事实并非如此案子。)

<DataGrid x:Name="dgv" SelectionMode="Single" SelectionUnit="FullRow" AutoGenerateColumns="False" Grid.Column="0" Grid.RowSpan="3" Margin="8" RowHeight="32" GridLinesVisibility="Horizontal" HeadersVisibility="Column" HorizontalScrollBarVisibility="Hidden"
              CanUserAddRows="False"
              CanUserDeleteRows="False"
              CanUserReorderColumns="False"
              CanUserResizeColumns="False"
              CanUserResizeRows="False"
              CanUserSortColumns="True"
              IsReadOnly="True"
              LoadingRow="dgv_LoadingRow"
              >
        <DataGrid.CellStyle>
            <Style TargetType="DataGridCell">
                <Style.Resources>
                    <SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="Red"></SolidColorBrush>
                </Style.Resources>
                <Setter Property="VerticalAlignment" Value="center"></Setter>
                <Setter Property="Padding" Value="4"></Setter>
                <Setter Property="Margin" Value="4"></Setter>
            </Style>
        </DataGrid.CellStyle>
        <DataGrid.RowStyle>
            <Style TargetType="DataGridRow">
                <Style.Resources>
                    <SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="Red"></SolidColorBrush>
                </Style.Resources>
            </Style>
        </DataGrid.RowStyle>
        <DataGrid.Style>
            <Style TargetType="DataGrid">
                <Style.Resources>
                    <SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="Red"></SolidColorBrush>
                </Style.Resources>
            </Style>
        </DataGrid.Style>

然后它继续 Column- 和 RowDefinitions ...

我遇到以下问题:

  • 只有单元格被选中,而不是整行。单元格中的边距使它看起来很奇怪(见截图)
  • 当我单击单元格的边距(屏幕截图中未以红色呈现的区域)时,该行没有选择 - 使得选择行非常不直观......
  • 我单击以选择行的单元格仍然被高亮显示(注意所选行中“Peter Müller”周围的黑色边框)

这是结果的屏幕截图:

在此处输入图像描述

4

2 回答 2

1

如果您要删除单元格定义中的边距怎么办?这说明了单元格占用了额外的空间,而红色没有覆盖该空间。如果您删除了边距,您是否得到了您正在寻找的东西。我认为真正的答案可能在DataGrid.RowBackground[Property][1] 中。

属性值 类型:System.Windows.Media.Brush 绘制行背景的画笔。注册的默认值为空。有关可能影响值的更多信息,请参阅 DependencyProperty。

您可以在 IsSelected 状态上使用触发器来设置颜色。默认情况下,选择 DataGrid 的整行。

<DataGrid Name="dataGrid1" Margin="12,12,0,0">
    <DataGrid.RowStyle>
        <Style TargetType="DataGridRow">
            <Setter Property="Background" Value="LightBlue" />
            <Style.Triggers>
                <Trigger Property="IsSelected" Value="True">
                    <Setter Property="Background" Value="Red"/>
                </Trigger>
            </Style.Triggers>
        </Style>
    </DataGrid.RowStyle>
</DataGrid>
于 2013-03-18T17:01:15.993 回答
0

为了更改默认背景行选择。您需要 1)编辑 datagridrow 样式和模板(即http://msdn.microsoft.com/en-us/library/cc278066%28v=vs.95%29.aspx) 2)处理 selectionchanged 事件和更改的行背景. 3)或在数据网格行加载事件上获取等于“BackgroundRectangle”的childrenoftype矩形并设置您想要的颜色 - 因此使用它会影响数据网格中的所有行,它类似于1但在代码后面执行此操作。

希望这能给你一些想法。

于 2013-03-18T17:01:45.403 回答