【发布时间】:2012-06-19 15:57:46
【问题描述】:
我有一个 WPF DataGrid,我已经使用了一段时间,而且效果很好。与这里的其他海报不同,我还没有遇到滚动条或鼠标滚轮的问题。我已将 CTRLEND 编程为转到 DataGrid 的末尾,然后它会跟踪最近添加的项目。我可以使用 up 键向上滚动 DataGrid 的内容。
但是,我使用 down 键的行为非常奇怪!如果我从DataGrid 的顶部开始并按住 down 键,它会滚动一点,然后最终在相邻的两行之间来回反弹。如果我 pgdn,它将向下滚动更多,然后跳回到它会在其间跳转的前两行的最顶部,然后向下滚动到我 pgdn 的位置会的。如果我再向下翻页,down 键将滚动到最后。如果我转到 DataGrid 的顶部并重新开始,我会一遍又一遍地得到完全相同的行为。
我还没有找到解决这个问题的帖子,而且我在DataGrid 文档中也没有看到任何有帮助的内容。
这只是一个三列DataGrid,其中每列显示TextBlocks。谁能解释为什么只有这一种滚动模式有问题?这是 XAML:
<DataGrid ItemsSource="{Binding MainLog}" AutoGenerateColumns="False"
Name="log_datagrid" SelectedCellsChanged="log_datagrid_SelectedCellsChanged"
KeyUp="datagrid_KeyUp" LoadingRow="log_datagrid_LoadingRow">
<DataGrid.Columns>
<!-- timestamp -->
<DataGridTemplateColumn Header="Timestamp">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding Timestamp}" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<!-- level -->
<DataGridTemplateColumn Header="Level">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding Level}" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<!-- error message -->
<DataGridTemplateColumn Header="Message">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding Message}" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
顺便说一句,即使我的所有事件处理程序的代码隐藏都被注释掉了,这种行为也会发生。
这是我的 MainLog 集合包含的结构的定义:
public struct MainLogData
{
public string Timestamp { get; set; }
public string Level { get; set; }
public string Message { get; set; }
}
【问题讨论】:
-
我在使用 wpf 和网格时也会出现奇怪的行为,甚至到了 Visual Studio 崩溃导致内存不足的地步,可能添加更多 RAM 会帮助您解决问题
-
添加更多 RAM 绝不是解决内存不足异常的方法。 ;) 也许您的数据网格单元格正在使用需要为
Disposed 的对象。 -
您的 MainLog 集合中的类是否具有 Equals 方法的自定义实现?
-
@alittlesheep 不,它没有。
标签: c# wpf .net-4.0 datagrid wpfdatagrid