DataGrid ScrollIntoView - 如何滚动到未显示的第一行?

Pro*_*mer 8 c# wpf datagrid scroll

我试图向后滚动一个WPF DataGrid代码.我用

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]);
}
Run Code Online (Sandbox Code Playgroud)

仅当itemNum当前未显示行时,此选项才会向下滚动.

例如,如果DataGrid足够长以容纳10行而我有20行,我需要调用此函数11次(直到itemNum11)才能滚动到下一行.

如果行已经适合网格(即使它是屏幕上的最后一行),它也不会向下滚动.

我希望实现这一点,当我调用此方法时,网格将下一行放入网格的顶部(如滚动条所做).为什么它不起作用?

Tsa*_*abo 19

使用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;
    }
Run Code Online (Sandbox Code Playgroud)

抱歉没有意识到WPF网格没有那个.关于滚动的观点保持有效.

ScrollIntoView仅在项目不在视图中时才会滚动,如果它在当前可见行的下方,则会使其成为最后一行,因此当您滚动查看第11项时,它看起来像是滚动到第二项.

这项工作应该适合你.滚动到最底部的行,然后向上滚动到您需要的任何行.注意,这里你实际上需要更新布局,否则它会在再次向上滚动之前忽略第一个滚动的结果.

        dataGridView.ScrollIntoView(DataGrid1.Items[DataGrid1.Items.Count - 1]);
        dataGridView.UpdateLayout();
        dataGridView.ScrollIntoView(DataGrid1.Items[itemIndex]);
Run Code Online (Sandbox Code Playgroud)

  • 对不起,但这是WPF中的DataGrid,有些粗鲁的人删除了我主题的WPF部分,可能只是为了获得积分.您的建议适用于WINDOWS FORM DataGridView (2认同)