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

WinUI 3 DataGrid表头字号修改方法及虚拟化特性咨询

WinUI3 CommunityToolkit DataGrid 常见问题解答

一、如何修改表头字号?

有两种常用方式调整DataGrid表头字号:

1. 全局统一修改所有表头

在DataGrid的Resources中重写DataGridColumnHeader的默认样式,一次性设置所有表头的字号及其他样式:

<controls:DataGrid ...>
    <controls:DataGrid.Resources>
        <SolidColorBrush x:Key="GridLinesBrush" Color="LightGray" />
        <!-- 重写表头默认样式 -->
        <Style TargetType="controls:DataGridColumnHeader">
            <Setter Property="FontSize" Value="14" />
            <!-- 可按需追加字体粗细、颜色等设置 -->
            <Setter Property="FontWeight" Value="SemiBold" />
            <Setter Property="Foreground" Value="#333333" />
        </Style>
    </controls:DataGrid.Resources>
    <!-- 列定义部分 -->
</controls:DataGrid>

2. 单独修改指定列的表头

如果仅需调整某一列的表头样式,可通过HeaderTemplate自定义表头内容:

<controls:DataGridTextColumn Width="70">
    <controls:DataGridTextColumn.HeaderTemplate>
        <DataTemplate>
            <TextBlock Text="ID" FontSize="16" FontWeight="Bold" />
        </DataTemplate>
    </controls:DataGridTextColumn.HeaderTemplate>
    <controls:DataGridTextColumn.Binding>
        <Binding Path="id" />
    </controls:DataGridTextColumn.Binding>
</controls:DataGridTextColumn>

二、DataGrid是否支持虚拟化?

WinUI3 CommunityToolkit的DataGrid默认支持UI虚拟化,无需额外手动开启,但需满足以下前提保证虚拟化正常生效:

  • DataGrid的高度需设置为固定值或Stretch(不能设为Auto,否则控件会一次性加载所有行数据);
  • 不要将DataGrid嵌套在ScrollViewer中,否则会破坏虚拟化机制;
  • 数据源建议使用支持虚拟化的集合(如VirtualizingObservableCollection,或实现ISupportIncrementalLoading的集合),普通ObservableCollection在数据量较大时也会触发基础虚拟化。

满足上述条件后,DataGrid会自动仅渲染可见区域内的行,大幅提升大数据量场景下的性能。


附:原始代码示例

<?xml version="1.0" encoding="utf-8"?>
<UserControl
    x:Class="ntk.DetailsPanel"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="using:Sample"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    xmlns:controls="using:CommunityToolkit.WinUI.UI.Controls"
    mc:Ignorable="d">

<controls:DataGrid DataContext="MainViewModel" ItemsSource="{x:Bind ResultDatasets}"
                      AutoGenerateColumns="False"
                      VerticalAlignment="Stretch" HorizontalAlignment="Stretch"
                      GridLinesVisibility="Horizontal"
                      IsReadOnly="False"
                      FrozenColumnCount="2"
                      IsTextScaleFactorEnabled="True"
                      SelectionMode="Single"
                      Background="White">

    <controls:DataGrid.Resources>
        <SolidColorBrush x:Key="GridLinesBrush" Color="LightGray" />
    </controls:DataGrid.Resources>

    <controls:DataGrid.Columns>
        <controls:DataGridTextColumn Header="ID" Binding="{Binding id}" Width="70"/>
        <controls:DataGridTextColumn Header="data1" Binding="{Binding id}" Width="80"/>
        <controls:DataGridTextColumn Header="data2" Binding="{Binding data2}" />
    </controls:DataGrid.Columns>
</controls:DataGrid>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 10:32:41