在 WPF 中使用 Datagrid 的多选复选框
Posted
技术标签:
【中文标题】在 WPF 中使用 Datagrid 的多选复选框【英文标题】:Multiple selection with checkbox using Datagrid in WPF 【发布时间】:2013-11-01 05:42:03 【问题描述】:我想知道如何使用 DataGridCheckBoxColumn 选择多行。
这里我只能选择一行,但是如何进行多选。
我的 XAML 如下:
<UserControl.Resources>
<Style x:Key="itemstyle" TargetType="x:Type DataGridRow">
<Style.Resources>
<SolidColorBrush x:Key="x:Static SystemColors.HighlightBrushKey" Color="LightGoldenrodYellow" />
<SolidColorBrush x:Key="x:Static SystemColors.ControlBrushKey" Color="Transparent" />
<SolidColorBrush x:Key="x:Static SystemColors.HighlightTextBrushKey" Color="Black" />
<SolidColorBrush x:Key="x:Static SystemColors.ControlTextBrushKey" Color="Black" />
</Style.Resources>
<Setter Property="HorizontalContentAlignment" Value="Stretch" />
<Setter Property="IsSelected" Value="Binding Path=IsSelected, Mode=TwoWay" />
<Style.Triggers>
<MultiTrigger>
<MultiTrigger.Conditions>
<Condition Property="ItemsControl.AlternationIndex" Value="1" />
<Condition Property="IsSelected" Value="False" />
<Condition Property="IsMouseOver" Value="False" />
</MultiTrigger.Conditions>
<Setter Property="Background" Value="#EEEEEEEE" />
</MultiTrigger>
</Style.Triggers>
</Style>
</UserControl.Resources>
<Grid Width="500" Height ="300">
<DataGrid ItemsSource="Binding Path=Script" HeadersVisibility="Column" SelectionMode="Single" AlternatingRowBackground="Gainsboro" Background="White" AutoGenerateColumns="False" ItemContainerStyle="StaticResource itemstyle" CanUserAddRows="True" GridLinesVisibility="None" Height="242" HorizontalAlignment="Left" HorizontalContentAlignment="Left" IsEnabled="True" IsReadOnly="True" Margin="10,14,0,44" Name="dgMain" RowHeight="23" VerticalAlignment="Center" VerticalContentAlignment="Center" Width="478" >
<i:Interaction.Triggers>
<i:EventTrigger EventName="MouseDoubleClick">
<i:InvokeCommandAction Command="Binding EditData"/>
</i:EventTrigger>
</i:Interaction.Triggers>
<DataGrid.Columns>
<DataGridCheckBoxColumn Binding="Binding Path=IsSelected" Header="Select" Width="50" />
<DataGridTextColumn Binding="Binding Path=Script_Text" Header="Script" Width="400" />
</DataGrid.Columns>
</DataGrid>
</Grid>
谢谢
序列号
【问题讨论】:
【参考方案1】:你可以做到,感谢 Scott
https://blog.scottlogic.com/2008/11/26/multiselect-datagrid-with-checkboxes.html
诀窍是使用如下所示的 RowHeaderTemplate
<DataGrid ItemsSource="Binding">
<DataGrid.RowHeaderTemplate>
<DataTemplate>
<Grid>
<CheckBox IsChecked="Binding Path=IsSelected, Mode=TwoWay,
RelativeSource=RelativeSource FindAncestor,
AncestorType=x:Type dg:DataGridRow"/>
</Grid>
</DataTemplate>
【讨论】:
【参考方案2】:SelectionMode="Extended"
或 SelectionMode="Multiple"
将使您的 DataGrid 多选
【讨论】:
您无法在 DataGrid 中选择多行? 是的,只能选择一行!!当我选择第二个时,已选择的项目未选中:( 这很奇怪.. 你是如何尝试选择行的.. 通过拖动单击并将鼠标拖到行上? 我尝试通过单击复选框进行选择。单击下一行项目时,已选中的项目未选中。 当我使用 Shift 键选择行时,可以进行多选。不是一一对应。以上是关于在 WPF 中使用 Datagrid 的多选复选框的主要内容,如果未能解决你的问题,请参考以下文章
使用easyui datagrid 的多选,但不能全选怎么回事?
Easyui datagrid 隐藏多选框 checkbox
WPF DataGrid CheckBox 多选 反选 全选