如何解决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 举报,一经查实,本站将立刻删除。