How to scroll WPF ScrollViewer's content to specific location

前端 未结 4 918
清酒与你
清酒与你 2020-12-16 11:55

I am writing my custom WPF ItemsControl to display a list of item. The items are shown embedded inside a ScrollViewer:



        
相关标签:
4条回答
  • 2020-12-16 12:02
    // How to scroll the uiElement to the mouse position?
    uiElement.BringIntoView();
    

    REF: https://msdn.microsoft.com/en-us/library/ms598110.aspx

    UPDATE: (thanks to @jmbpiano) Note, it does not bring the control exactly to the current mouse cursor position. It just brings the control to a visible position, where the Operator will be able to click it with the mouse (which in 99% of cases is all someone who finds this question is likely to need).

    0 讨论(0)
  • 2020-12-16 12:04

    Try this below code :

    
    private void ScrollViewerFromVSTree(DependencyObject element, double pos)
    {
        try
        {
            int totalElementcount = VisualTreeHelper.GetChildrenCount(element);
            for (int counter = 0; counter < totalElementcount; counter++)
            {
                DependencyObject ele = VisualTreeHelper.GetChild(element, counter);
                if (ele.GetType().Name == "ScrollViewer")
                {
                    ScrollViewer scrollViewer = ele as ScrollViewer;
                    if (pos > "YourAssumption") // for me it is 610
                    {
                        scrollViewer.ScrollToVerticalOffset(scrollViewer.VerticalOffset + 45);
                    }
                    else if (pos < "YourAssumption") //for me it is 40
                    {
                        scrollViewer.ScrollToVerticalOffset(scrollViewer.VerticalOffset - 45);
                    }
                    break;
                }
                ScrollViewerFromVSTree(VisualTreeHelper.GetChild(element, counter), pos);
            }
        }
        catch (Exception)
        {
        }
    }
    
    
    0 讨论(0)
  • 2020-12-16 12:05

    Use UIElement.TranslatePoint() to calculate what position you want to scroll to

    Use ScrollViewer.ScrollToVerticalOffset() to do the scrolling

    0 讨论(0)
  • 2020-12-16 12:08

    Something like the following:

    var sv = (ScrollViewer)Template.FindName("PART_MyScrollViewer", this); // If you do not already have a reference to it somewhere.
    var ip = (ItemsPresenter)sv.Content;
    var point = item.TranslatePoint(new Point() - (Vector)e.GetPosition(sv), ip);
    sv.ScrollToVerticalOffset(point.Y + (item.ActualHeight / 2));
    
    0 讨论(0)
提交回复
热议问题