WPF DataGridTemplateColumn背景颜色未在所选的datagrid行上更改

时间:2018-05-04 07:14:27

标签: wpf datagrid wpfdatagrid wpftoolkit datagridtemplatecolumn

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

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

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

在: enter image description here

在: enter image description here

这里是代码:

<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>

2 个答案:

答案 0 :(得分:1)

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

这样的事情:

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

答案 1 :(得分:0)

最后,我已经解决了,问题出在DataGridTemplateColumn的样式声明中。

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

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

VirtualizingPanel

通过这个:

InternalChildren

这样做有效。

结果下方。

在选择行之前:

enter image description here

选择行后:

enter image description here