none
WPF滚动条点击最顶端和最低端可以无限滚动? RRS feed

  • 问题

  • 现在问题:滚动到最顶部不滚动了。

    private void Inkcanvas_MouseMove(object sender, System.Windows.Input.MouseEventArgs e)
             {
                 if (e.LeftButton != MouseButtonState.Pressed)
                     return;
    
                if (Inkcanvas.EditingMode == InkCanvasEditingMode.None)
                 {
                     //滚动到最顶端不滚动了,VerticalOffset=0
                     Point endPoint = e.GetPosition(Inkcanvas);
                     double y = e.GetPosition(this).Y - StartPoint.Y;
                     ScrollViewerLocal.ScrollToVerticalOffset(ScrollViewerLocal.VerticalOffset + y);//(((Point)StartPoint).Y - e.GetPosition(this).Y)
                     Inkcanvas.Height += 100;
                     var currentScrollPosition = ScrollViewerLocal.VerticalOffset;
    
        }
    
    }


    2018年5月24日 5:59

全部回复

  • 你好 Marry,

    >>现在问题:滚动到最顶部不滚动了

    对于此问题,我们需要检查几个变量的变化:
    1. Y轴变化量,也就是你代码中的 y 变量
    2. 传入ScrollToVerticalOffset方法的double 参数数值的变化,也即是ScrollViewerLocal.VerticalOffset + y

    建议打印输出,追踪变化

    有一点我发现您在不断增长InkCanvas的高度,这点据我的理解是没有必要的,也会影响滚动量的相对位置计算。

    以下是一个我快速的测试代码:

    XAML:

    <ScrollViewer Name="sv">
                <InkCanvas Name="Inkcanvas" Height="2500" MouseMove="Inkcanvas_MouseMove" EditingMode="None">
                    <Rectangle Height="2000" Fill="Gray" Width="400"></Rectangle>
                </InkCanvas>
            </ScrollViewer>

    C# code:

    public partial class MainWindow : Window
        {
            public MainWindow()
            {
                InitializeComponent();
            }
            
            public Point StartPoint { get; set; }
            
            public double VerticalOffset {
                get {
                    return sv.VerticalOffset;
                }
            }
            
            private void ScrollToVerticalOffset(double offset)
            {
                sv.ScrollToVerticalOffset(offset);
            }
    
            private void Inkcanvas_MouseDown(object sender, MouseButtonEventArgs e)
            {
                StartPoint = e.GetPosition(Inkcanvas);
            }
    
            private void Inkcanvas_MouseMove(object sender, System.Windows.Input.MouseEventArgs e)
            {
                if (e.LeftButton != MouseButtonState.Pressed)
                    return;
    
                if (Inkcanvas.EditingMode == InkCanvasEditingMode.None)
                {
                    Point endPoint = e.GetPosition(Inkcanvas);
                    double y = e.GetPosition(this).Y - StartPoint.Y;
                    //Debug.WriteLine(y);
                    this.ScrollToVerticalOffset(VerticalOffset + y);
                    var currentScrollPosition = VerticalOffset;
                }
            }
        }


    We are trying to better understand customer views on social support experience, so your participation in this interview project would be greatly appreciated if you have time. Thanks for helping make community forums a great place.
    Click HERE to participate the survey.

    2018年5月25日 2:50
    版主
  • 非常感谢您的回复,

    我的意思是点我圈住的地方,这个面板扩展(”漫游功能“字体就看不到了)。

    2018年5月25日 9:29
  • 非常感谢您的回复,

    我的意思是点我圈住的地方,这个面板扩展(”漫游功能“字体就看不到了)。

    抱歉,还是很难根据这个描述理解您的问题,您如果可以制作一个去除敏感信息后的简单demo,分享或者贴出完整代码给到我们,那可以很快尝试重现您的问题,再帮您解答


    We are trying to better understand customer views on social support experience, so your participation in this interview project would be greatly appreciated if you have time. Thanks for helping make community forums a great place.
    Click HERE to participate the survey.

    2018年5月25日 9:38
    版主