You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WPF DataGrid:点击DataGridCheckBoxColumn时禁止选中行

解决DataGridCheckBoxColumn点击触发行选中的问题

我明白你的痛点——点击DataGridCheckBoxColumn中的复选框时会意外触发行选中,进而触发那些耗时的加载操作,拖慢了快速勾选的速度。你已经给其他列应用了DisableSelection样式来避免这个问题,现在只需要把这个样式也应用到复选框列上就行,而且完全不需要替换成普通CheckBox控件。

解决方案

你只需要修改DataGridCheckBoxColumn的CellStyle,让它基于你已经定义好的DisableSelection样式,同时保留原有的事件处理器逻辑。这样既能继承禁用行选中的设置,又不会影响复选框的勾选事件响应。

修改后的完整代码

<DataGrid ItemsSource="{Binding GridModel}" x:Name="patientGrid" VerticalAlignment="Top" AutoGenerateColumns="False" CanUserAddRows="false" Height="484" Grid.RowSpan="2" RenderTransformOrigin="0.497,0.551" >
    <DataGrid.Resources>
        <Style x:Key="DisableSelection" TargetType="DataGridCell">
            <Setter Property="Focusable" Value="False"/>
            <Setter Property="Background" Value="Transparent"/>
            <Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.ControlTextBrushKey}}"/>
            <Setter Property="BorderBrush" Value="Transparent"/>
        </Style>
    </DataGrid.Resources>
    <DataGrid.Columns>
        <DataGridCheckBoxColumn Header="Choose" x:Name="choose" >
            <DataGridCheckBoxColumn.CellStyle>
                <!-- 关键修改:基于DisableSelection样式,而非默认DataGridCell样式 -->
                <Style TargetType="DataGridCell" BasedOn="{StaticResource DisableSelection}">
                    <EventSetter Event="CheckBox.Checked" Handler="OnChecked"/>
                    <EventSetter Event="CheckBox.Unchecked" Handler="OnChecked"/>
                    <Setter Property="Background" Value="Transparent" />
                </Style>
            </DataGridCheckBoxColumn.CellStyle>
        </DataGridCheckBoxColumn>
        <DataGridTextColumn CellStyle="{StaticResource DisableSelection}" Header="nmbr" x:Name="workIdcl" Binding="{Binding ID}" IsReadOnly="True" />
    </DataGrid.Columns>
</DataGrid>

为什么这样有效?

  • DisableSelection样式中的Focusable="False"会阻止单元格获得焦点,进而避免触发行选中状态的变化;
  • 通过BasedOn="{StaticResource DisableSelection}",你的复选框列单元格会继承这个样式的所有设置,同时你添加的EventSetter依然能正常监听复选框的勾选/取消事件;
  • 完全保留了DataGridCheckBoxColumn的原生特性,不需要替换成普通CheckBox控件,符合你的需求。

内容的提问来源于stack exchange,提问作者abdou_dev

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.09 07:22:53