将填充添加到单元格时,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>
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>