WPF DataGridTemplateColumn 背景颜色在选定的数据网格行上没有改变

WPF DataGridTemplateColumn background color not changing on datagrid row selected

我有下面的 WPF 工具包 DataGrid。我使用 DataGridTemplateColumn 创建了一个自定义列,其中包含一个切换按钮(无文本)。

选择数据网格行时,切换按钮的背景颜色正确更改为与行选择相同的颜色,但单元格的背景颜色没有改变,它仍然是白色。为什么?

这是 DataGridTemplateColumn 列在行选择前后的外观。

之前:

之后:

这里是代码:

<UserControl.Resources>        
    <ResourceDictionary>

        <!-- Body content datagrid cell vertical centering -->
        <Style x:Key="Body_Content_DataGrid_Centering" TargetType="{x:Type dg:DataGridCell}">
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="{x:Type dg:DataGridCell}">
                        <Grid Background="{TemplateBinding Background}">
                            <ContentPresenter VerticalAlignment="Center" />
                        </Grid>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
        </Style>
    </ResourceDictionary>
</UserControl.Resources>

<!-- Other Stuff -->

<dg:DataGrid x:Name="MyDg"   
             ItemsSource="{Binding Path=ListOfItems}"
             Margin="3 5 5 5"
             AutoGenerateColumns="False"
             CanUserAddRows="False" CanUserResizeRows="False"
             SelectionMode="Single" 
             SelectedItem="{Binding Path=MySelectedItem}"
             ColumnWidth="*"
             AlternationCount="2" 
             Focusable="False" SelectionUnit="FullRow"
             CellStyle="{StaticResource Body_Content_DataGrid_Centering}">

    <dg:DataGrid.Columns>

        <dg:DataGridTemplateColumn Header="Selection" Width="Auto" CanUserResize="False">
            <dg:DataGridTemplateColumn.CellStyle>
                <Style TargetType="dg:DataGridCell">
                    <Setter Property="HorizontalAlignment"  Value="Center"/>
                </Style>
            </dg:DataGridTemplateColumn.CellStyle>
            <dg:DataGridTemplateColumn.CellTemplate>
                <DataTemplate>
                    <ToggleButton Content="" IsChecked="{Binding Path=IsSelected}">
                        <ToggleButton.Template>
                            <ControlTemplate TargetType="{x:Type ToggleButton}">
                                <StackPanel Orientation="Horizontal">
                                    <Image MaxWidth="32" MaxHeight="32">
                                        <Image.Style>
                                            <Style>
                                                <Setter Property="Image.Source" Value="/My.Graphics;component/PNG/Unchecked.png" />
                                                <Style.Triggers>
                                                    <DataTrigger Binding="{Binding IsChecked, 
                                                                           RelativeSource={RelativeSource  Mode=FindAncestor, 
                                                                                           AncestorType={x:Type ToggleButton}}}" Value="True">
                                                        <Setter Property="Image.Source" Value="/My.Graphics;component/PNG/Checked.png" />
                                                    </DataTrigger>
                                                </Style.Triggers>
                                            </Style>
                                        </Image.Style>
                                    </Image>
                                 <!--   <ContentPresenter Content="{TemplateBinding Content}" Margin="0,0,0,0" />-->
                                </StackPanel>
                            </ControlTemplate>
                        </ToggleButton.Template>
                    </ToggleButton>
                </DataTemplate>
            </dg:DataGridTemplateColumn.CellTemplate>
        </dg:DataGridTemplateColumn>
     </dg:DataGrid.Columns>
</dg:DataGrid>

将栏模板的背景颜色设置为透明。

像这样:

<DataTemplate>
    <ToggleButton Background="Transparent" Content="" IsChecked="{Binding Path=IsSelected}">

终于解决了,问题出在DataGridTemplateColumn的样式声明上。

尽管将切换按钮背景设置为透明,但它并没有像 Raviraj 建议的那样工作。

最后的解决方案是更改有关 DataGridTemplateColumn 的代码片段:

<dg:DataGridTemplateColumn.CellStyle>
    <Style TargetType="dg:DataGridCell">
        <Setter Property="HorizontalAlignment"  Value="Center"/>
    </Style>
</dg:DataGridTemplateColumn.CellStyle>

通过这个:

<dg:DataGridTemplateColumn.CellStyle>
    <Style TargetType="dg:DataGridCell">                                    
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type dg:DataGridCell}">
                    <Grid Background="{TemplateBinding Background}">                                                   
                        <ContentPresenter HorizontalAlignment="Center" />
                    </Grid>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>
</dg:DataGridTemplateColumn.CellStyle>

这样做有效。

低于结果。

行选择前:

行选择后: