积极答复者
wpf datagrid LoadingRow事件的疑问:

问题
-
void DGList_LoadingRow(object sender, DataGridRowEventArgs e) { var row = e.Row.Item as Model.BusStuBal; if (row.FValidDate.HasValue) { var c = (row.FValidDate.Value - DateTime.Now).Days; if ( c < 0) e.Row.Background = new SolidColorBrush(Color.FromRgb(172, 168, 153)); else if ( c >= 0 && c < 30) e.Row.Background = new SolidColorBrush(Color.FromRgb(245, 241, 144)); } }
上面是datagrid LoadingRow事件。但是很奇怪,如果我的datagrid数据量少,没有滚动条的时候,他显示正常。但是当数据量多的时候。他就显示背景颜色出问题了。
举个例子。当我第一次加载完所有的datagrid数据后,屏幕第一次显示的数据的背景颜色没有问题。由于数据量多,datagrid显示了滚动条,然后我继续往下拉,显示就开始出问题了。
最后我再往上拉,问题就更奇怪了,明明刚才第一次看到这行是没有背景颜色的。但是往回拉时,结果他就有背景颜色了。
其实这个类似问题我之前也曾遇到过。比如我想让datagrid的最后一行弄成是合计行,因为合计行。所以我想用特别的颜色标注一下。
我当时在网上找了一个获取datagrid某行的代码如下:public static DataGridRow GetRow(this DataGrid dataGrid, int index) { DataGridRow row = (DataGridRow)dataGrid.ItemContainerGenerator.ContainerFromIndex(index); if (row == null) { // may be virtualized, bring into view and try again dataGrid.UpdateLayout(); dataGrid.ScrollIntoView(dataGrid.Items[index]); row = (DataGridRow)dataGrid.ItemContainerGenerator.ContainerFromIndex(index); } return row; }
如果当datagrid没有滚动条的时候,他显示都是正确的,但是当数据量多并出现滚动条的时候,只要我一拉滚动条,他显示就会很乱!
^_^
答案
-
你好,
根据你的描述,可能是DataGrid虚拟化导致的问题,你可以尝试指定VirtualizingStackPanel.VirtualizationMode 为 Standard 或者 Recycling,请看以下文档:
#VirtualizingStackPanel Class
http://msdn.microsoft.com/en-us/library/system.windows.controls.virtualizingstackpanel.aspx#VirtualizationMode Enumeration
http://msdn.microsoft.com/en-us/library/system.windows.controls.virtualizationmode.aspx如果仍不能解决你的问题,请提供下你的完整示例工程(OneDrive网盘),方便我们定位错误。
We are trying to better understand customer views on social support experience, so your participation in this interview project would be greatly appreciated if you have time. Thanks for helping make community forums a great place.
Click HERE to participate the survey.- 已标记为答案 晴天大胜 2014年8月15日 7:10
全部回复
-
你好,
根据你的描述,可能是DataGrid虚拟化导致的问题,你可以尝试指定VirtualizingStackPanel.VirtualizationMode 为 Standard 或者 Recycling,请看以下文档:
#VirtualizingStackPanel Class
http://msdn.microsoft.com/en-us/library/system.windows.controls.virtualizingstackpanel.aspx#VirtualizationMode Enumeration
http://msdn.microsoft.com/en-us/library/system.windows.controls.virtualizationmode.aspx如果仍不能解决你的问题,请提供下你的完整示例工程(OneDrive网盘),方便我们定位错误。
We are trying to better understand customer views on social support experience, so your participation in this interview project would be greatly appreciated if you have time. Thanks for helping make community forums a great place.
Click HERE to participate the survey.- 已标记为答案 晴天大胜 2014年8月15日 7:10
-
非常感谢您。问题解决了。
当datagrid放在tabitem里面时,会不会是这样导致这种情况。
^_^
你好,
很高兴解决你的问题。
>>当datagrid放在tabitem里面时,会不会是这样导致这种情况
DataGrid 和TabItem 默认都会有虚拟化,这里有一篇文章教你如何关闭Tab Virtualization:
#WPF TabControl: Turning Off Tab Virtualization
http://www.codeproject.com/Articles/460989/WPF-TabControl-Turning-Off-Tab-Virtualization
We are trying to better understand customer views on social support experience, so your participation in this interview project would be greatly appreciated if you have time. Thanks for helping make community forums a great place.
Click HERE to participate the survey.- 已编辑 Franklin ChenMicrosoft employee, Moderator 2014年8月15日 7:14