WPF DataGrid列标题间出现额外边框问题求助
解决WPF DataGrid列标题间额外边框问题
我之前也碰到过这个烦人的小问题!默认WPF DataGrid的列标题有时候会因为默认样式的细微叠加,冒出不该有的额外边框线条,尤其是没加自定义样式的时候更容易出现。给你几个针对性的解决方案试试:
覆盖DataGridColumnHeader的默认边框样式
直接在窗口或应用的资源里定义列标题的样式,统一边框的厚度和颜色,避免默认四边边框叠加产生双重线:<Window.Resources> <Style TargetType="{x:Type DataGridColumnHeader}"> <!-- 只保留右侧边框,其他边设为0 --> <Setter Property="BorderThickness" Value="0,0,1,0"/> <!-- 使用系统默认的深色边框刷,保持风格统一 --> <Setter Property="BorderBrush" Value="{DynamicResource {x:Static SystemColors.ControlDarkBrushKey}}"/> </Style> </Window.Resources>调整网格线显示规则
有时候垂直网格线会和列标题的边框重叠,看起来像额外线条。可以把GridLinesVisibility设为只显示水平方向:<DataGrid Loaded="TransactionGrid_Loaded" x:Name="TransactionGrid" CanUserAddRows="False" HeadersVisibility="Column" Grid.Row="3" Grid.ColumnSpan="3" AutoGenerateColumns="False" PreviewKeyDown="Transactions_PreviewKeyDown" GridLinesVisibility="Horizontal"> <!-- 列定义不变 --> </DataGrid>排除系统主题干扰
部分Windows系统主题会修改WPF控件的默认样式,导致边框异常。你可以在App.xaml里强制使用WPF的默认Aero主题:<Application.Resources> <ResourceDictionary> <ResourceDictionary.MergedDictionaries> <ResourceDictionary Source="/PresentationFramework.Aero;component/themes/Aero.NormalColor.xaml"/> </ResourceDictionary.MergedDictionaries> </ResourceDictionary> </Application.Resources>
如果还是没解决,推荐用Snoop工具(WPF控件调试神器)查看列标题的实际可视化树,看看是不是有隐藏的边框元素在搞鬼,能快速定位问题根源。
内容的提问来源于stack exchange,提问作者tommylogon1




