Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/264.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何更改列标题';使用WPF datagrid时的背景色_C#_.net_Wpf_Xaml_Wpfdatagrid - Fatal编程技术网

C# 如何更改列标题';使用WPF datagrid时的背景色

C# 如何更改列标题';使用WPF datagrid时的背景色,c#,.net,wpf,xaml,wpfdatagrid,C#,.net,Wpf,Xaml,Wpfdatagrid,使用WPF datagrid时如何更改列标题的背景色?需要直接修改xaml吗?使用针对DataGridColumnHeader的带有setter的样式: <DataGrid> <DataGrid.Resources> <Style BasedOn="{StaticResource {x:Type DataGridColumnHeader}}" TargetType="{x:Type DataGridColumnHeader}">

使用WPF datagrid时如何更改列标题的背景色?需要直接修改xaml吗?

使用针对DataGridColumnHeader的带有setter的样式:

<DataGrid>
    <DataGrid.Resources>
        <Style BasedOn="{StaticResource {x:Type DataGridColumnHeader}}" TargetType="{x:Type DataGridColumnHeader}">
            <Setter Property="Background" Value="Blue" />
        </Style>
    </DataGrid.Resources>
</DataGrid>
    <Style.Triggers >
        <Trigger Property="SortDirection" Value="Ascending"  >

            <Setter Property="Background" Value="{StaticResource SelectedSolidColor}" />

        </Trigger>

    </Style.Triggers>




</Style>

试试这个:

  <windows.Resources>
      <LinearGradientBrush x:Key="HeaderBrush" StartPoint="0.5,0" EndPoint="0.5,1">
                <GradientStop Color="#FF6B8E95" Offset="0"/>
                <GradientStop Color="#FF14A7C1" Offset="1"/>
                <GradientStop Color="#FF1E424E" Offset="0.509"/>
                <GradientStop Color="#FF1D4855" Offset="0.542"/>
                <GradientStop Color="#FF1D4855" Offset="0.542"/>
                <GradientStop Color="#FF193A44" Offset="0.526"/>
            </LinearGradientBrush>

            <LinearGradientBrush x:Key="HeaderBorderBrush" StartPoint="0.5,0" EndPoint="0.5,1">
                <GradientStop Color="#FF1D1D1D" Offset="0.614"/>
                <GradientStop Color="#FF007F96" Offset="0.853"/>
                <GradientStop Color="#FF0AEAFA" Offset="1"/>
            </LinearGradientBrush>

            <Style x:Key="HeaderStyle" TargetType="DataGridColumnHeader">
                <Setter Property="Background" Value="{StaticResource HeaderBrush}" />
                <Setter Property="Foreground" Value="White" />
                <Setter Property="BorderBrush" Value="{StaticResource HeaderBorderBrush}" />
                <Setter Property="BorderThickness" Value="0" />
                <Setter Property="SnapsToDevicePixels" Value="True" />
                <Setter Property="HorizontalContentAlignment" Value="Left" />
                <Setter Property="MinWidth" Value="0" />
                <Setter Property="MinHeight" Value="30" />
                <Setter Property="Cursor" Value="Hand" />
            </Style>
    </Windows.Resources>

<Grid>
<DataGrid Name="dataGrid1" ColumnHeaderStyle="{StaticResource HeaderStyle}"/>
</Grid>
    <Style.Triggers >
        <Trigger Property="SortDirection" Value="Ascending"  >

            <Setter Property="Background" Value="{StaticResource SelectedSolidColor}" />

        </Trigger>

    </Style.Triggers>




</Style>

结果是:

<DataGridTextColumn Header="ID">
    <DataGridTextColumn.HeaderStyle>
        <Style TargetType="DataGridColumnHeader">
            <Setter Property="Background" Value="Green"/>
        </Style>
    </DataGridTextColumn.HeaderStyle>
</DataGridTextColumn>
    <Style.Triggers >
        <Trigger Property="SortDirection" Value="Ascending"  >

            <Setter Property="Background" Value="{StaticResource SelectedSolidColor}" />

        </Trigger>

    </Style.Triggers>




</Style>


    <Style.Triggers >
        <Trigger Property="SortDirection" Value="Ascending"  >

            <Setter Property="Background" Value="{StaticResource SelectedSolidColor}" />

        </Trigger>

    </Style.Triggers>




</Style>

我发现,对我来说,不改变其他样式(paddig/borders/…)而只改变背景色是不可能的

    <Style.Triggers >
        <Trigger Property="SortDirection" Value="Ascending"  >

            <Setter Property="Background" Value="{StaticResource SelectedSolidColor}" />

        </Trigger>

    </Style.Triggers>




</Style>
所以我在aero2.normalcolor.xaml中写了一些与原文相似的风格

    <Style.Triggers >
        <Trigger Property="SortDirection" Value="Ascending"  >

            <Setter Property="Background" Value="{StaticResource SelectedSolidColor}" />

        </Trigger>

    </Style.Triggers>




</Style>
样式包含鼠标悬停、按键和排序效果

    <Style.Triggers >
        <Trigger Property="SortDirection" Value="Ascending"  >

            <Setter Property="Background" Value="{StaticResource SelectedSolidColor}" />

        </Trigger>

    </Style.Triggers>




</Style>
这是结果

    <Style.Triggers >
        <Trigger Property="SortDirection" Value="Ascending"  >

            <Setter Property="Background" Value="{StaticResource SelectedSolidColor}" />

        </Trigger>

    </Style.Triggers>




</Style>

    <Style.Triggers >
        <Trigger Property="SortDirection" Value="Ascending"  >

            <Setter Property="Background" Value="{StaticResource SelectedSolidColor}" />

        </Trigger>

    </Style.Triggers>




</Style>
您还可以创建自己的颜色

    <Style.Triggers >
        <Trigger Property="SortDirection" Value="Ascending"  >

            <Setter Property="Background" Value="{StaticResource SelectedSolidColor}" />

        </Trigger>

    </Style.Triggers>




</Style>

    <Style.Triggers >
        <Trigger Property="SortDirection" Value="Ascending"  >

            <Setter Property="Background" Value="{StaticResource SelectedSolidColor}" />

        </Trigger>

    </Style.Triggers>




</Style>

使用:

<DataGrid ColumnHeaderStyle="{StaticResource DCHS}"/>
    <Style.Triggers >
        <Trigger Property="SortDirection" Value="Ascending"  >

            <Setter Property="Background" Value="{StaticResource SelectedSolidColor}" />

        </Trigger>

    </Style.Triggers>




</Style>

试试这个

    <Style.Triggers >
        <Trigger Property="SortDirection" Value="Ascending"  >

            <Setter Property="Background" Value="{StaticResource SelectedSolidColor}" />

        </Trigger>

    </Style.Triggers>




</Style>

    <Style.Triggers >
        <Trigger Property="SortDirection" Value="Ascending"  >

            <Setter Property="Background" Value="{StaticResource SelectedSolidColor}" />

        </Trigger>

    </Style.Triggers>




</Style>


这似乎消除了列分隔符并压缩了边框,因此列标题看起来有点不同。
有助于消除这种情况添加
基于
,以保留旧属性:
@wotanii-您的建议无效。(在VS2017和.NET 4.6.2中试用过)检查这篇文章。任何想要设计数据网格的人都必须阅读这篇文章。这个答案是针对WinForms的
datagrid
,而不是WPF。感谢您提供结果截图!如果您的
BorderThickness
0
,则无需设置
HeaderOrderBrush
的颜色(至少如本示例屏幕截图所示)。这是可以的,但我们如何设置材质设计主题??thanx@david2020-您必须为深色主题创建自己的颜色