如何在UWP CommunityToolkit DataGrid上设置列标题的样式

7

我目前在研究UWP的CommunityToolkit DataGrid。我已经阅读了相关文档,但是我并不清楚如何应用ColumnHeaderStyle。我不确定应该针对列标题中的哪个部分来设置样式。我希望更改背景和前景颜色。我还希望这些属性能够应用于整个标题,而不仅仅是单个列。

 <controls:DataGrid.ColumnHeaderStyle>
       <Style TargetType="">
             <Setter Property="" Value=""/>
       </Style>                                       
 </controls:DataGrid.ColumnHeaderStyle>

你说得对,你需要更新DataGridColumnHeaderStyle。你需要更改什么取决于你需要的自定义/样式,最好提供更多关于你需要的样式的信息,这样我就可以帮你提供一些代码片段了。 - Dishant
@Dishant。感谢您的回复。我正在尝试更改整个标题的背景颜色(而不仅仅是具有内容的列)。我还希望更改标题列中文本的前景颜色。 - Mark
@Dishant。谢谢你的回复。我正在尝试更改整个标题的背景颜色(而不仅仅是具有内容的列)。我还希望更改标题列中文本的前景颜色。为了更改背景颜色,我针对边框选择了背景作为属性并设置了属性值。但是,我得到了一个异常,说该样式不能应用于该目标类型。我不确定我应该将我的目标类型设置为什么。如果我针对TextBlock更改前景色,我也会遇到异常。 - Mark
根据DataGrid的样式,您可以更改DataGridColumnHeaderBackgroundBrushDataGridColumnHeaderForegroundBrush来更改标题的背景和前景。 - Dishant
@Dishant,再次感谢您的回复,对于我回复迟到表示歉意。我不明白如何从数据网格中定位这些属性。您能否提供一个示例,比如只是更改背景颜色? - Mark
3个回答

6
这个问题让我感到困惑了一段时间,但是最终我发现您需要添加另一个XML命名空间声明才能定位到列标题。
<Application
    x:Class="MyApp"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:controls="using:Microsoft.Toolkit.Uwp.UI.Controls"
    xmlns:controlsprimitives="using:Microsoft.Toolkit.Uwp.UI.Controls.Primitives">

在这种情况下,我只是添加了:

xmlns:controlsprimitives="using:Microsoft.Toolkit.Uwp.UI.Controls.Primitives"

然后你就可以创建一个针对此目标的样式:

<Style x:Key="ColumnHeaderStyle" TargetType="controlsprimitives:DataGridColumnHeader">
    <!-- style properties -->
</Style>

(截至目前撰写本文,但出于某些原因,在这样做时似乎存在奇怪的样式行为。)

需要的NuGet包是.Controls和.Controls.DataGrid。 - Allstar

0

@user1559112的回答让我找到了正确的方向,但是花了一些时间才意识到为了处理“奇怪的样式行为”,仅仅添加一个Background的setter是不够的。我必须像这样重写模板:

<controls:DataGrid.ColumnHeaderStyle>
    <Style TargetType="controlsprimitives:DataGridColumnHeader">
        <Setter Property="ContentTemplate">
            <Setter.Value>
                <DataTemplate>
                    <TextBlock Text="{Binding}" />
                </DataTemplate>
            </Setter.Value>
        </Setter>
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="prms:DataGridColumnHeader">
                    <ContentPresenter Background="{ThemeResource HeaderBackgroundBrush}" />
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>
</controls:DataGrid.ColumnHeaderStyle>

0
您可以在 App.xaml 中按照以下方式覆盖 DataGridColumnHeaderBackgroundBrush 和 DataGridColumnHeaderForegroundBrush:
<SolidColorBrush x:Key="DataGridColumnHeaderBackgroundBrush" Color="#FFCB2128" />
<SolidColorBrush x:Key="DataGridColumnHeaderForegroundBrush" Color="#FFB03060" />

这是一个不错的想法,对于更改前景色它很有效。但出于某种原因,它无法为我更改背景色。我不得不覆盖模板才能更改背景色。 - Ben Jasperson

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接