将填充添加到单元格时,DataGrid 行选择不起作用

DataGrid row selection not working when padding is added to cells

WPF 中的 DataGrid 控件表现异常。当我点击一行时,它应该是 selected。 单击单元格边框或行边框时出现问题。它什么都不做。作为用户,我想单击行和 select 它而不强迫我重新单击因为我不小心单击了单元格之间的边框。

是否有可能以某种方式修复此行为,所以无论我在哪里单击它 selects 行?


[编辑]

我发现这是我将 DataGrid 应用于 CellStyle 的这种样式的问题 属性:

<Style x:Key="CustomDataGridCellStyle" TargetType="DataGridCell">
    <Setter Property="Padding" Value="2" />
    <Setter Property="Margin" Value="0" />
    <Setter Property="Background" Value="White" />
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="DataGridCell">
                <Border x:Name="border" 
                              BorderBrush="#CCaaccda"
                              BorderThickness="1"
                              CornerRadius="0"
                              Padding="4"
                            >
                    <ContentPresenter />
                </Border>
                <ControlTemplate.Triggers>
                    <DataTrigger Binding="{Binding RelativeSource={RelativeSource Self}, Path=IsSelected}" Value="true">
                        <Setter TargetName="border" Property="Background" Value="#CC119EDA"/>
                    </DataTrigger>
                </ControlTemplate.Triggers>
            </ControlTemplate>
        </Setter.Value>
    </Setter>   
</Style>

如果我删除它,它就会正常工作。我想知道风格是如何扰乱交互来控制的。


[编辑]

Padding="4"

正在防止单元格之间创建的空白区域无法进行命中测试。知道如何向单元格添加非命中阻塞填充吗?


[编辑]

而且解决方案很奇怪。

<Grid Background="Transparent" IsHitTestVisible="True">
    <ContentPresenter Margin="4"/>
</Grid>

边距被添加到单元格内容中,它对点击没有反应。但是我用具有 IsHitTestVisible="True" 且透明的 Grid 将其包围。 WPF 很奇怪。

因为您没有发布任何 xaml,也没有发布数据网格的图片。 很难找出问题所在。

但是,这 可能是 由命中测试失败引起的。 鼠标命中测试通过代表元素的彩色像素矩阵检测元素。

尝试通过将背景设置为透明来为所有像素着色。透明不会影响您的行的外观并会为命中测试着色:

<DataGrid>
    <DataGrid.RowStyle>
        <Style TargetType="DataGridRow">
            <Setter Property="Background" Value="Transparent" />
        </Style>
    </DataGrid.RowStyle>
</DataGrid>