微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

WPF DataGrid-禁用DataGridCheckBoxColumn

如何解决WPF DataGrid-禁用DataGridCheckBoxColumn

我正在尝试使用datagridView创建多检查网格。

我已经扩展了网格,并且一切正常,除了当我在DataGridCheckBoxColumn中选中一个复选框时,它选择了该行。因为我去的时候所选择的行更改,这使得快速缓慢选择复选框上很多负载。当我在复选框列中选择一个复选框时,有什么方法或建议可以防止选择该行? 我已经使用此solution使gridView的其他行工作(当我单击它们时,它们被禁用了),现在的问题是DataGridCheckBoxColumn。

PS:我正在使用DataGridCheckBoxColumn而不是CheckBox搜索解决方

我真正需要的是在DataGridCheckBoxColumnColumn中使用此CellStyle="{StaticResource 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>
                    
                    <Style  targettype="DataGridCell"  BasedOn="{StaticResource {x:Type DataGridCell}}">
                                <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"  />

谢谢。

解决方法

使用DataGridCheckBoxColumn,实际上是在检查CheckBox之前选择了单元格。

您可以将DataGridCheckBoxColumn替换为DataGridTemplateColumn并为PreviewMouseLeftButtonDown处理CheckBox事件:

private void OnPreviewMouseLeftButtonDown(object sender,MouseButtonEventArgs e)
{
    e.Handled = true;
    CheckBox checkBox = (CheckBox)sender;
    checkBox.IsChecked = !checkBox.IsChecked.HasValue || !checkBox.IsChecked.Value;
}

XAML:

<DataGridTemplateColumn Header="Choose" x:Name="choose">
    <DataGridTemplateColumn.CellStyle>
        <Style  TargetType="DataGridCell"  BasedOn="{StaticResource {x:Type DataGridCell}}">
            <Setter Property="Background" Value="Transparent" />
        </Style>
    </DataGridTemplateColumn.CellStyle>
    <DataGridTemplateColumn.CellTemplate>
        <DataTemplate>
            <CheckBox PreviewMouseLeftButtonDown="OnPreviewMouseLeftButtonDown"
                      Checked="OnChecked"
                      Unchecked="OnUnchecked"/>
        </DataTemplate>
    </DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。