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>
添加前效果:
添加后效果:
问题原因
自定义的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
相关产品推荐
相关产品推荐

