请教WPF高手 DataGrid 滚动时候为什么用后台代码定义的样式会变
要实现:DataGrid中满足给定条件的单元格的字体颜色为红色,
在窗体show之前就完成datagrid数据初始化 :datagrid.itemssource = datatable.defaltview
我在生成datatable的时候就记录了所有需要标红的单元格的索引
在窗体show之后执行了一个函数,实现DataGrid中上述索引的单元格Foreground为红
问题:
完事后表格中的这些单元格字体确实变红了,但是!!!我上下滚动了以后(表格没设左右滚动)这些单元格的样式居然变了,某些该红的不红了,不该红的变红了,每次滚动都会变,而且看不出变的规律。有大神遇到过或看得明白这个问题么??求赐教
注:看过网上的一些方法说这个问题可通过设置datagrid的单元格数据触发器(DataTriger什么的)实现,但我的单元格内容不是简单数字,而是类似“7.0XXXX\R\NXXX”之类的,要在前面的数字大于某个值的时候标红,所以觉得触发器也很难实现。
上代码:
.xmal:(DataGrid没有重写任何WPF预定义的事件)
<DataGrid Name="data" FontSize="14" HeadersVisibility="Column" IsReadOnly="True" Foreground="Black" VerticalScrollBarVisibility="Hidden" CanUserSortColumns="False" CanUserReorderColumns="False">
</DataGrid>
.xmal.cs:
window.show()之前就是根据规则生成数据表DataTable,然后标记需要标红的单元格索引,然后初始化datagrid
show()之后实现单元格变红的代码:
-------------------------------------------割------------------------------------
public void setDataCellStyle()
{
//这个循环是根据之前记录的单元格索引找到需要标红的单元格,改变他们的样式
for (int i = 0; i < strongWindCellIndex_X.Count; i++)
{
DataGridRow rowContainer = (DataGridRow)data.ItemContainerGenerator.ContainerFromIndex(strongWindCellIndex_X[i]);
if (rowContainer == null)
{
data.UpdateLayout();
data.ScrollIntoView(data.Items[strongWindCellIndex_X[i]]);
data.UpdateLayout();
rowContainer = (DataGridRow)data.ItemContainerGenerator.ContainerFromIndex(strongWindCellIndex_X[i]);
if (rowContainer == null)
continue;
}
DataGridCellsPresenter presenter = GetVisualChild<DataGridCellsPresenter>(rowContainer);
DataGridCell cell = (DataGridCell)presenter.ItemContainerGenerator.ContainerFromIndex(strongWindCellIndex_Y[i]);
if (cell == null)
{
&nbs