首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在不影响其他属性的情况下更改WPF数据网格的列标题的背景色

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

Stack Overflow用户
提问于 2017-02-10 14:35:49
回答 2查看 719关注 0票数 1

用于列标题的样式:-

代码语言:javascript
复制
<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>

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

我更改了背景颜色,添加了

代码语言:javascript
复制
<Style x:Key="DataGridColumnHeaderStyle" TargetType="{x:Type DataGridColumnHeader}">
    <Setter Property="Background" Value="White" />
    <Setter Property="Template"> 
    ...........

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

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

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

EN

回答 2

Stack Overflow用户

发布于 2017-02-10 19:02:48

如果更改DataGridHeaderBorder的背景色,排序箭头将会丢失。

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

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

票数 1
EN

Stack Overflow用户

发布于 2017-02-10 14:40:37

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

代码语言:javascript
复制
    DataGridViewColumn dataGridViewColumn = dataGridView1.Columns[0];
    dataGridViewColumn.HeaderCell.Style.BackColor = Color.Magenta;
    dataGridViewColumn.HeaderCell.Style.ForeColor = Color.Yellow;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42152948

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档