调整窗口大小时WPF DataGrid出现异常竖线问题求助
WPF DataGrid 窗口调整时出现异常白色竖线问题
我用以下XAML实现WPF DataGrid:
<DataGrid Name="DataGridBids" VerticalAlignment="Stretch" HorizontalAlignment="Stretch" HeadersVisibility="Column" Background="#0d4338" CanUserAddRows="False" CanUserDeleteRows="False" CanUserReorderColumns="False" ItemsSource="{Binding Bids}" AutoGenerateColumns="False" IsReadOnly="True" IsManipulationEnabled="False" HorizontalScrollBarVisibility="Disabled" VerticalScrollBarVisibility="Disabled" GridLinesVisibility="None" Margin="0,0,0,0" BorderThickness="0"> <DataGrid.Resources> <Style TargetType="DataGridCell"> <Setter Property="TextBlock.TextAlignment" Value="Center"/> <Setter Property="Background" Value="#0d4338"/> <Setter Property="Foreground" Value="#11b376"/> <Setter Property="BorderThickness" Value="0,0,0,0"/> </Style> </DataGrid.Resources> <DataGrid.Columns> <DataGridTextColumn Header="Agent" Width="*" Binding="{Binding Agent}"/> <DataGridTextColumn Header="Quantity" Width="*" Binding="{Binding Quantity}"/> <DataGridTextColumn Header="Buy" Width="*" Binding="{Binding Price, StringFormat='N2'}"/> </DataGrid.Columns> </DataGrid>
初始打开时显示正常:
但调整窗口大小时,会频繁出现异常白色竖线(并非每次都出现),且仅出现在第二列和第三列之间:
修复方案
统一单元格边框颜色
即使设置了BorderThickness=0,布局计算的像素误差仍可能露出边框。将单元格边框颜色设为与背景一致,抵消视觉异常:<Style TargetType="DataGridCell"> <!-- 原有Setter --> <Setter Property="BorderBrush" Value="#0d4338"/> </Style>重置列头样式
竖线也可能来自列头的边框渲染,给列头添加统一样式:<DataGrid.Resources> <!-- 原有DataGridCell样式 --> <Style TargetType="DataGridColumnHeader"> <Setter Property="Background" Value="#0d4338"/> <Setter Property="Foreground" Value="#11b376"/> <Setter Property="BorderThickness" Value="0"/> <Setter Property="BorderBrush" Value="#0d4338"/> <Setter Property="HorizontalContentAlignment" Value="Center"/> </Style> </DataGrid.Resources>启用像素对齐
开启SnapsToDevicePixels避免DPI缩放或布局计算导致的像素间隙:<DataGrid Name="DataGridBids" SnapsToDevicePixels="True" <!-- 原有属性 --> >禁用硬件加速(极端场景)
如果是WPF渲染引擎的硬件加速bug,可尝试关闭该控件的硬件加速:<DataGrid Name="DataGridBids" RenderOptions.ProcessRenderMode="SoftwareOnly" <!-- 原有属性 --> >调整列宽计算逻辑
用SharedSizeGroup让列宽计算更稳定,避免动态调整时的误差:<DataGridTextColumn Header="Agent" Width="*" SharedSizeGroup="BidColumn"/> <DataGridTextColumn Header="Quantity" Width="*" SharedSizeGroup="BidColumn"/> <DataGridTextColumn Header="Buy" Width="*" SharedSizeGroup="BidColumn"/>
内容的提问来源于stack exchange,提问作者Renato Dias
相关产品推荐
相关产品推荐

