我有一个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在他的回答中所解释的,这里对此进行了解释。
- 1 回答
- 0 关注
- 274 浏览
添加回答
举报
0/150
提交
取消