为了账号安全,请及时绑定邮箱和手机立即绑定

向下滚动/向上滚动后,WPF Datagrid工具箱列无法正确绘制

向下滚动/向上滚动后,WPF Datagrid工具箱列无法正确绘制

C#
青春有我 2021-05-04 21:46:04
我有一个WPF MVVM应用程序。在WPF主窗口中,我有一个WPF Datagrid Toolkit。该数据网格具有一些列。根据某些条件(视图模型上绑定的属性),颜色将应用于整个行。此外,还有两个特殊的列。这两个列的类型为DataGridTextColumn,分别称为Date1和Date2。如果Date1的值大于Date2的值,则Date1和Date2单元格都应该用橘红色上色。分别绑定到MyDate1和MyDate2视图模型属性的Date1和Date2的类型为DateTime。我的问题是:首先,当datagrid加载数据时,行以及Date1和Date2列的颜色正确。由于“日期1”>“日期2”,出现了一些行,“日期1”和“日期2”用橘红色涂成彩色。然后,如果我使用垂直滚动条向下滚动数据网格,然后再次向上滚动到第一数据网格行,则我注意到,尽管Date1 <= Date2,现在更多行(Date1和Date2列)显示为橙色红色。怎么了?查看:<Window x:Name="MainWindow" x:Class="My.Apps.WPF.TestApp.wMain"    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"    xmlns:my="http://schemas.microsoft.com/wpf/2008/toolkit"     xmlns:classes="clr-namespace:My.Apps.WPF.TestApp.Classes"    xmlns:scm="clr-namespace:System.ComponentModel;assembly=WindowsBase"            WindowState="Maximized">    <Grid x:Name="MyGrid" HorizontalAlignment="Stretch">        <Grid.RowDefinitions>            <RowDefinition Height="auto"></RowDefinition>            <RowDefinition Height="*"></RowDefinition>            <RowDefinition Height="auto"></RowDefinition>        </Grid.RowDefinitions>        <my:DataGrid  Grid.Row="1" Name="MyDg"                                           AutoGenerateColumns="False"                  ItemsSource="{Binding Path=MyListOfItems}"                   SelectedItem="{Binding Path=MySelectedItem}"                   VerticalAlignment="Stretch" IsReadOnly="True"                   SelectionMode="Single" ColumnWidth="*"                                                     SelectionChanged="MyDg_SelectionChanged"                  Width="{Binding Path=ActualWidth, ElementName=MyGrid}">
查看完整描述

1 回答

?
梦里花落0921

TA贡献1772条经验 获得超6个赞

我已通过将EnableRowVirtualization设置为False来解决。默认情况下将其设置为True。默认情况下,属性EnableColumnVirtualization设置为False。

似乎使用虚拟化单元正在影响.NET 3.5中的数据网格样式。漏洞?如果是这样,我不知道它是否已在NET 4.0及更高版本中得到纠正。

无论如何,我担心它,因为这意味着我无法使用虚拟化的单元...所以如果有人有其他解决方案,请在此处分享。

其他用户也遇到过同样的问题,请参见此处

更新时间

另外,如果要将EnableRowVirtualization保留为True,可以通过执行以下操作仅更改Virtualization Mode来解决:

<DataGrid VirtualizingStackPanel.VirtualizationMode="Standard" />

问题是defaut的VirtualizationMode设置为Recycling,因此当重复使用容器时滚动时会导致行着色不正确。正如Eirik在他的回答中所解释的,这里对此进行了解释。


查看完整回答
反对 回复 2021-05-16
  • 1 回答
  • 0 关注
  • 274 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信