You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在WinUI/UWP的CommunityToolkit DataGrid中设置选中行前景色?

修改WinUI DataGrid选中行前景色的方法

WinUI的DataGrid确实没有直接暴露设置选中行前景色的属性,不过可以通过两种方式实现需求:

方法一:重写全局系统资源

WinUI的DataGrid选中行的前景色默认由系统资源DataGridSelectedForegroundBrush控制,你可以在App.xaml或者页面的资源字典里重新定义这个资源,就能全局或局部修改所有DataGrid的选中行前景色:

<!-- 在App.xaml的<Application.Resources>中添加 -->
<SolidColorBrush x:Key="DataGridSelectedForegroundBrush" Color="White" />

如果只想针对某个页面的DataGrid生效,把这段代码放到该页面的<Page.Resources>里即可。

方法二:自定义DataGridRow样式

如果需要更精细的控制(比如只给特定DataGrid设置),可以重写DataGridRow的ControlTemplate,在选中状态的视觉状态里指定前景色:

<controls:DataGrid xmlns:controls="using:Microsoft.UI.Xaml.Controls">
    <controls:DataGrid.Resources>
        <Style TargetType="controls:DataGridRow">
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="controls:DataGridRow">
                        <Border x:Name="RowBorder"
                                Background="{TemplateBinding Background}"
                                BorderBrush="{TemplateBinding BorderBrush}"
                                BorderThickness="{TemplateBinding BorderThickness}">
                            <VisualStateManager.VisualStateGroups>
                                <VisualStateGroup x:Name="SelectionStates">
                                    <VisualState x:Name="Unselected" />
                                    <VisualState x:Name="Selected">
                                        <VisualState.Setters>
                                            <!-- 这里设置你想要的选中行前景色 -->
                                            <Setter Target="ContentPresenter.Foreground" Value="White" />
                                            <Setter Target="RowBorder.Background" Value="{ThemeResource DataGridSelectedBackgroundBrush}" />
                                        </VisualState.Setters>
                                    </VisualState>
                                    <VisualState x:Name="SelectedUnfocused">
                                        <VisualState.Setters>
                                            <Setter Target="ContentPresenter.Foreground" Value="White" />
                                            <Setter Target="RowBorder.Background" Value="{ThemeResource DataGridSelectedUnfocusedBackgroundBrush}" />
                                        </VisualState.Setters>
                                    </VisualState>
                                </VisualStateGroup>
                            </VisualStateManager.VisualStateGroups>
                            <ContentPresenter x:Name="ContentPresenter"
                                              Content="{TemplateBinding Content}"
                                              ContentTemplate="{TemplateBinding ContentTemplate}"
                                              Foreground="{TemplateBinding Foreground}" />
                        </Border>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
        </Style>
    </controls:DataGrid.Resources>
    <!-- 这里添加你的DataGrid列定义 -->
</controls:DataGrid>

这种方式可以单独给某个DataGrid定制选中行样式,同时保留其他默认的视觉行为。

内容的提问来源于stack exchange,提问作者Ragavan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 08:35:09