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

WPF DataGrid添加圆角边框后内容消失,如何正确添加?

正确为WPF DataGrid添加圆角边框的解决方案

问题描述

为WPF的DataGrid添加圆角边框时,使用如下自定义模板后,DataGrid的内容完全消失,仅显示边框:

<Setter Property="Template">
    <Setter.Value>
        <ControlTemplate TargetType="{x:Type DataGrid}">
            <Border Background="Transparent" CornerRadius="5" BorderBrush="{DynamicResource HiGrayBrush}" BorderThickness="1,2,1,2" SnapsToDevicePixels="True"/>
        </ControlTemplate>
    </Setter.Value>
</Setter>

添加前效果:
添加前DataGrid内容正常显示

添加后效果:
添加后仅显示边框,内容消失

问题原因

自定义的ControlTemplate完全替换了DataGrid的默认视觉树,只保留了边框元素,但没有包含DataGrid用于显示数据的核心承载容器(默认是ScrollViewer),导致数据内容无法渲染。

解决方案

修改DataGridStyle中的Template部分,在Border内部添加ScrollViewer承载内容区域,确保数据正常显示:

<Style x:Key="DataGridStyle" TargetType="DataGrid">
    <!-- 原有Setter配置保持不变 -->
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type DataGrid}">
                <Border Background="Transparent" 
                        CornerRadius="5" 
                        BorderBrush="{DynamicResource HiGrayBrush}" 
                        BorderThickness="1,2,1,2" 
                        SnapsToDevicePixels="True"
                        Padding="1"> <!-- 添加内边距避免内容贴边框 -->
                    <ScrollViewer x:Name="DG_ScrollViewer" 
                                  Focusable="false"
                                  Padding="{TemplateBinding Padding}">
                        <ItemsPresenter SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"/>
                    </ScrollViewer>
                </Border>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

说明

  • ScrollViewer是DataGrid默认模板的核心元素,负责承载表头、行数据等内容,自定义模板必须保留该元素才能正常显示数据
  • 添加Padding可以优化视觉效果,避免内容直接贴合圆角边框
  • 原有单元格、表头、行头等样式配置无需修改,可继续正常工作

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 09:05:15