in WPF. How to scroll Objects in ScrollViewer by mouse-dragging, like as iPhone?

前端 未结 7 814
轻奢々
轻奢々 2020-12-30 10:59

it\'s done well to scroll by mouse-wheel or scrollbar seed-dragging. but scrolling by mouse-dragging contents on scroll view is not done. How can i implement this action?

7条回答
  •  -上瘾入骨i
    2020-12-30 11:45

    You can do this in C# WPF like this. note that there are two type of Point classes.From them you should use System.Windows.Point to get this work.These are mouse related events for your ScrollViewer.The code below will scroll your object to both horizontal and vertical inside the ScrollViewer.

       System.Windows.Point ScrollMousePoint1 = new System.Windows.Point();
       double HorizontalOff1 = 1; double VerticalOff1 = 1;
       private void ScrollViewer1_PreviewMouseLeftButtonDown(object sender, System.Windows.Input.MouseButtonEventArgs e)
            {
                ScrollMousePoint1 = e.GetPosition(ScrollViewer1);
                HorizontalOff1 = ScrollViewer1.HorizontalOffset;
                VerticalOff1 = ScrollViewer1.VerticalOffset;
                ScrollViewer1.CaptureMouse();
            }
    
            private void ScrollViewer1_PreviewMouseMove(object sender, System.Windows.Input.MouseEventArgs e)
            {
                if (ScrollViewer1.IsMouseCaptured)
                {
                    ScrollViewer1.ScrollToHorizontalOffset(HorizontalOff1 + (ScrollMousePoint1.X - e.GetPosition(ScrollViewer1).X));
                    ScrollViewer1.ScrollToVerticalOffset(VerticalOff1 + (ScrollMousePoint1.Y - e.GetPosition(ScrollViewer1).Y));
                }
            }
    
            private void ScrollViewer1_PreviewMouseLeftButtonUp(object sender, System.Windows.Input.MouseButtonEventArgs e)
            {
                ScrollViewer1.ReleaseMouseCapture();
            }
    
            private void ScrollViewer1_PreviewMouseWheel(object sender, System.Windows.Input.MouseWheelEventArgs e)
            {
                ScrollViewer1.ScrollToHorizontalOffset(ScrollViewer1.HorizontalOffset + e.Delta);
                ScrollViewer1.ScrollToVerticalOffset(ScrollViewer1.VerticalOffset + e.Delta);
            }
    

提交回复
热议问题