如何在不影响其他属性的情况下更改WPF数据网格的列标题的背景颜色

时间:2017-02-10 06:35:49

标签: wpf

用于列标题的样式: -

<Style x:Key="DataGridColumnHeaderStyle" TargetType="{x:Type DataGridColumnHeader}">
  <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type DataGridColumnHeader}">
                    <Grid VerticalAlignment="Bottom" HorizontalAlignment="Stretch">
                        <Grid.RowDefinitions>
                            <RowDefinition Height="Auto"/>
                            <RowDefinition Height="*"/>
                        </Grid.RowDefinitions>

                        <theme:DataGridHeaderBorder Grid.Column="0" Grid.Row="0" SortDirection="{TemplateBinding SortDirection}"
                                 IsHovered="{TemplateBinding IsMouseOver}"
                                 IsPressed="{TemplateBinding IsPressed}"
                                 IsClickable="{TemplateBinding CanUserSort}"
                                 Background="{TemplateBinding Background}"
                                 BorderBrush="{TemplateBinding BorderBrush}"
                                 BorderThickness="{TemplateBinding BorderThickness}"
                                 Padding ="{TemplateBinding Padding}"
                                 SeparatorVisibility="{TemplateBinding SeparatorVisibility}"
                                 ContextMenu="{DynamicResource DataGridColumnHeaderContextMenu}"                        
                                 SeparatorBrush="{TemplateBinding SeparatorBrush}">

                                <TextBlock  Grid.Column="0" Grid.Row="0"   Text="{TemplateBinding Content}"  FontWeight="Bold"  
                              SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" 
                              VerticalAlignment="{TemplateBinding VerticalContentAlignment}"
                              HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
                              Padding ="{TemplateBinding Padding}"                               
                                        TextWrapping="NoWrap"></TextBlock>
                        </theme:DataGridHeaderBorder>                          
                        <Thumb Grid.Column="0" Grid.Row="0" Name="PART_LeftHeaderGripper" HorizontalAlignment="Left">
                            <Thumb.Style>
                                <Style TargetType="Thumb">
                                    <Style.Resources>
                                        <ResourceDictionary />
                                    </Style.Resources>
                                    <Setter Property="FrameworkElement.Width">
                                        <Setter.Value>
                                            <thumbConversion:Double>8</thumbConversion:Double>
                                        </Setter.Value>
                                    </Setter>
                                    <Setter Property="Panel.Background">
                                        <Setter.Value>
                                            <SolidColorBrush>#00FFFFFF</SolidColorBrush>
                                        </Setter.Value>
                                    </Setter>
                                    <Setter Property="FrameworkElement.Cursor">
                                        <Setter.Value>
                                            <Cursor>SizeWE</Cursor>
                                        </Setter.Value>
                                    </Setter>
                                    <Setter Property="Control.Template">
                                        <Setter.Value>
                                            <ControlTemplate TargetType="Thumb">
                                                <Border Padding="{TemplateBinding Control.Padding}" Background="{TemplateBinding Panel.Background}" />
                                            </ControlTemplate>
                                        </Setter.Value>
                                    </Setter>
                                </Style>
                            </Thumb.Style>
                        </Thumb>

                        <Thumb Grid.Column="0" Grid.Row="0" Name="PART_RightHeaderGripper" HorizontalAlignment="Right">
                            <Thumb.Style>
                                <Style TargetType="Thumb">
                                    <Style.Resources>
                                        <ResourceDictionary />
                                    </Style.Resources>
                                    <Setter Property="FrameworkElement.Width">
                                        <Setter.Value>
                                            <thumbConversion:Double>8</thumbConversion:Double>
                                        </Setter.Value>
                                    </Setter>
                                    <Setter Property="Panel.Background">
                                        <Setter.Value>
                                            <SolidColorBrush>#00FFFFFF</SolidColorBrush>
                                        </Setter.Value>
                                    </Setter>
                                    <Setter Property="FrameworkElement.Cursor">
                                        <Setter.Value>
                                            <Cursor>SizeWE</Cursor>
                                        </Setter.Value>
                                    </Setter>
                                    <Setter Property="Control.Template">
                                        <Setter.Value>
                                            <ControlTemplate TargetType="Thumb">
                                                <Border Padding="{TemplateBinding Control.Padding}" Background="{TemplateBinding Panel.Background}" />
                                            </ControlTemplate>
                                        </Setter.Value>
                                    </Setter>
                                </Style>
                            </Thumb.Style>
                        </Thumb>
                    </Grid>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>

在更改背景颜色之前,Column标题如下所示。

enter image description here

我通过添加

更改了背景颜色
<Style x:Key="DataGridColumnHeaderStyle" TargetType="{x:Type DataGridColumnHeader}">
    <Setter Property="Background" Value="White" />
    <Setter Property="Template"> 
    ...........

它覆盖了我在template属性中指定的所有内容。排序符号未显示。

然后我尝试在模板的TextBlock部分添加背景颜色。我将水平和垂直对齐更改为“拉伸”并提供背景颜色。排序符号被切断,当我选择标题时看起来很难看。

enter image description here

我只是想改变背景颜色。我该怎么做?

2 个答案:

答案 0 :(得分:1)

在不丢失排序箭头的情况下,无法更改DataGridHeaderBorder的背景颜色。

如果设置了Background属性,则必须在自定义模板中自行创建排序箭头。

您看到的默认背景实际上是在OnRender类的Microsoft.Windows.Themes.DataGridHeaderBorder方法中绘制的。它未在某些XAML模板中定义。

答案 1 :(得分:0)

首先在DataGridView中,您需要将EnableHeadersVisualStyles设置为false。完成后,您可以在每列上设置单独的标题样式。

    DataGridViewColumn dataGridViewColumn = dataGridView1.Columns[0];
    dataGridViewColumn.HeaderCell.Style.BackColor = Color.Magenta;
    dataGridViewColumn.HeaderCell.Style.ForeColor = Color.Yellow;