1

I tried to achieve this somehow with the detection of the offset, but since the offset is the distance from the left side, I don't how to detect the distance from the right side.

This is what I tried:

    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
            }
        }
    }

the event in the datagrid:

            ScrollViewer.ScrollChanged="AllEntries_ScrollChanged"
Yessir
  • 183
  • 3
  • 13
  • 1
    Does this answer your question? [How to find that ScrollViewer is scrolled to the end in WPF?](https://stackoverflow.com/questions/10793717/how-to-find-that-scrollviewer-is-scrolled-to-the-end-in-wpf) – Sinatr Oct 29 '20 at 07:54
  • My sender item is a DataGrid, not a scrollviewer – Yessir Oct 29 '20 at 08:08
  • 1
    It shouldn't be a problem, you can [search for child](https://stackoverflow.com/a/1759923/1997232). – Sinatr Oct 29 '20 at 08:18

1 Answers1

1

I think you need to combine two posts:

Putting them togather, your code behind has to be something like this:

    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;
    }
PiGi78
  • 415
  • 2
  • 6