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

时间:2015-08-04 06:46:56

标签: c# wpf datagrid padding

WPF中的DataGrid控件表现得很奇怪。当我点击一行时,应该选择它。 单击单元格边框或行边框时出现问题。它什么都不做。作为用户,我想点击行并选择它而不强迫我重新点击,因为我不小心点击了单元格之间的边界。

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

[编辑]

我发现它应用于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>

保证金被添加到单元格内容中,而不会对点击做出反应。但我用Grid包围它,它有IsHitTestVisible =&#34; True&#34;并且是透明的。 WPF很疯狂。

1 个答案:

答案 0 :(得分:1)

因为你没有发布任何xaml,或者你的数据网格看起来如何。 很难指出这个问题。

但是,Hit测试失败导致可能。 鼠标命中测试通过表示它的彩色像素矩阵检测元素。

尝试通过将背景设置为“透明”来着色所有像素。透明不会影响行的外观,也不会影响Hit测试:

private ICommand _myCommand;
public ICommand MyCommand => _myCommand ?? (_myCommand = new RelayCommand(Execute));