C#WPF,如何检测Datagrid中的滚动条是否到达末尾?

时间:2020-10-29 07:47:56

标签: c# wpf datagrid

我试图通过某种程度的偏移量检测来实现这一点,但是由于偏移量是距左侧的距离,因此我不打算检测距右侧的距离。

这是我尝试过的:

    private void AllEntries_ScrollChanged(object sender, ScrollChangedEventArgs e)
    {
        if ( e.HorizontalChange != 0)
        {
            if (e.HorizontalOffset <  350)
            {
                //Do something
            }
            if (e.HorizontalOffset / e.ExtentWidth > 0.9) 
            {
                //Do something
            }
        }
    }

数据网格中的事件:

            ScrollViewer.ScrollChanged="AllEntries_ScrollChanged"

1 个答案:

答案 0 :(得分:1)

我认为您需要合并两个帖子:

将它们放在一起,后面的代码必须是这样的:

    private void myGrid_ScrollChanged(object sender, ScrollChangedEventArgs e)
    {
        if (e.HorizontalChange != 0)
        {
            var viewer = GetScrollViewer((DataGrid)sender);
            if (viewer.HorizontalOffset + viewer.ViewportWidth == viewer.ExtentWidth)
            {
                MessageBox.Show("Right end");
            }
        }
        else if (e.VerticalChange != 0)
        {
            var viewer = GetScrollViewer((DataGrid)sender);
            if (viewer.VerticalOffset + viewer.ViewportHeight == viewer.ExtentHeight)
            {
                MessageBox.Show("Lower end");
            }
        }

    }

    private ScrollViewer GetScrollViewer(UIElement element)
    {
        if (element == null) return null;

        ScrollViewer retour = null;
        for (int i = 0; i < VisualTreeHelper.GetChildrenCount(element) && retour == null; i++)
        {
            if (VisualTreeHelper.GetChild(element, i) is ScrollViewer)
            {
                retour = (ScrollViewer)(VisualTreeHelper.GetChild(element, i));
            }
            else
            {
                retour = GetScrollViewer(VisualTreeHelper.GetChild(element, i) as UIElement);
            }
        }
        return retour;
    }