DataGrid ScrollIntoView-如何滚动到未显示的第一行
本文关键字:显示 一行 ScrollIntoView- 何滚动 滚动 DataGrid | 更新日期: 2023-09-27 18:27:24
我正试图向下滚动带有代码的WPF数据网格。我使用
int itemNum=0;
private void Down_Click(object sender, RoutedEventArgs e)
{
if (itemNum + 1 > dataGridView.Items.Count - 1) return;
itemNum += 1;
dataGridView.UpdateLayout();
dataGridView.ScrollIntoView(dataGridView.Items[itemNum]);
}
仅当当前未显示itemNum
行时,此选项才会向下滚动。
例如,如果DataGrid足够长,可以容纳10行,而我有20行,我需要调用此函数11次(直到itemNum
为11)才能滚动到下一行。
如果行已经适合网格(即使是屏幕上的最后一行),它也不会向下滚动。
我想实现的是,当我调用这个方法时,网格将把下一行带到网格的顶部(就像滚动器一样)。为什么它不起作用?
使用DataGridView.FirstDisplayedScrollingRowIndex。
int itemNum=0;
private void Down_Click(object sender, RoutedEventArgs e)
{
itemNum++;
if (itemNum > dataGridView.Items.Count - 1) return;
//dataGridView.UpdateLayout(); <-- I don't think you need this
dataGridView.FirstDisplayedScrollingRowIndex = itemNum;
}
很抱歉没有意识到WPF网格没有这个。关于滚动的观点仍然有效。
ScrollIntoView只有在项目不在视图中时才会滚动,如果项目在当前可见行下方,则会使其成为最后一行,因此当您滚动查看第11个项目时,它看起来像是滚动到了第二个。
这种变通办法应该对你有效。你滚动到最底部的一行,然后向上滚动到你需要的任何一行。注意,在这里,您实际上需要更新布局,否则在再次向上滚动之前,它将忽略第一次滚动的结果。
dataGridView.ScrollIntoView(DataGrid1.Items[DataGrid1.Items.Count - 1]);
dataGridView.UpdateLayout();
dataGridView.ScrollIntoView(DataGrid1.Items[itemIndex]);
看看这个,它适用于ListBox,但洞察力很好,也可能适用于网格:
简而言之:这些项是异步加载到ListBox中的,因此如果您在CollectionChanged事件(或类似事件)中调用ScrollIntoView(),它将不会有任何项,因此不会滚动。
希望它能帮助我,它确实帮助了我!;-)