WPF 数据网格 - 如何将蓝色行突出显示替换为复选框选择



默认情况下,当您在 WPF 中的 DataGrid 上选择一行时,该行上会显示蓝色突出显示。

对于我的 DataGrid,我有一列,每行都有一个复选框。选中一行后,应选中该框,并且不会显示分散注意力的蓝色突出显示。

有人知道一种方法吗?我已经尝试过这段代码,但我不知道如何实现我的复选框列

    <DataGrid x:Name="dataGrid" BorderThickness="2" Margin="8,125,139,8" ColumnHeaderHeight="24" HorizontalGridLinesBrush="#FF009444" VerticalGridLinesBrush="#FF009444" BorderBrush="#FF009444" Background="White" RowHeight="20" FontFamily="Segoe UI Light" FontSize="14.8" AutoGenerateColumns="False" CanUserReorderColumns="False" CanUserResizeColumns="False" CanUserSortColumns="False" HeadersVisibility="Column" CanUserResizeRows="False" HorizontalScrollBarVisibility="Disabled" Padding="0">
        <DataGrid.CellStyle>
            <Style TargetType="DataGridCell">
                <Setter Property="BorderThickness" Value="2" />
                <Style.Triggers>
                    <Trigger Property="IsSelected" Value="True">
                        <Setter Property="Background" Value="White" />
                        <Setter Property="Foreground" Value="Black" />
                        <Setter Property="BorderThickness" Value="0" />
                        <Setter Property="BorderBrush" Value="#FF009444" />
                    </Trigger>
                </Style.Triggers>
            </Style>
        </DataGrid.CellStyle>

        <DataGrid.RowStyle>
            <Style TargetType="DataGridRow">
                <Style.Triggers>
                    <Trigger Property="IsSelected" Value="True">
                        <Setter Property="BorderThickness" Value="0" />
                        <Setter Property="BorderBrush" Value="#FF009444" />
                    </Trigger>
                </Style.Triggers>
            </Style>
        </DataGrid.RowStyle>
        <DataGrid.Resources>
            <Style TargetType="{x:Type DataGridColumnHeader}">
                <Setter Property="Background" Value="#FF39B54A" />
                <Setter Property="BorderBrush" Value="#FF009444"/>
                <Setter Property="BorderThickness" Value="0,0,2,2"/>
                <Setter Property="Foreground" Value="White"/>
            </Style>
        </DataGrid.Resources>

        <DataGrid.Columns>
            <DataGridTextColumn x:Name="Column1" Header=" #" Binding="{Binding Name}" Width="20" IsReadOnly="True"/>
            <DataGridTextColumn x:Name="Column2" Header=" Position" Binding="{Binding Name}" Width="90" IsReadOnly="True"/>
            <DataGridTextColumn x:Name="Column3" Header=" Type" Binding="{Binding Name}" Width="71" IsReadOnly="True"/>
            <DataGridTextColumn x:Name="Column4" Header=" Delay" Binding="{Binding Name}" Width="76" IsReadOnly="True"/>
            <DataGridTemplateColumn x:Name="Column5" Header=" [ ]" Width="20">
                <DataGridTemplateColumn.CellTemplate>
                    <DataTemplate>
                        <CheckBox IsChecked="{Binding Name}"/>
                    </DataTemplate>
                </DataGridTemplateColumn.CellTemplate>
            </DataGridTemplateColumn>
            <DataGridTextColumn x:Name="Column6" IsReadOnly="True" Header="Description" Binding="{Binding Name}" Width="584"/>
        </DataGrid.Columns>
    </DataGrid>

最简单的方法是使用 DataGridCheckBoxColumn 并覆盖选择样式,如下所示,

    <DataGrid Name="Grid" AutoGenerateColumns="False">            
        <DataGrid.Resources>
            <ResourceDictionary>
                <Style x:Key="{x:Type DataGridCell}" TargetType="{x:Type DataGridCell}">
                    <Setter Property="Foreground" Value="Black" />
                    <Setter Property="Background" Value="{x:Null}" />
                    <Setter Property="BorderBrush" Value="{x:Null}" />                       
                </Style>
            </ResourceDictionary>
        </DataGrid.Resources>            
        <DataGrid.Columns>
            <DataGridCheckBoxColumn Header="Bool property" Binding="{Binding Path=IsSelected, RelativeSource={RelativeSource AncestorType={x:Type DataGridRow}}}"></DataGridCheckBoxColumn>                
            <DataGridTextColumn Header="Text Property" Binding="{Binding .}"/>
        </DataGrid.Columns>            
    </DataGrid>

最新更新