WPF C#触摸滚动正在拖动整个窗口

时间:2016-02-17 11:15:28

标签: c# wpf multi-touch

我正在开发一个支持触摸屏的WPF应用程序,我遇到了一个问题:当使用触摸屏滚动ScrollViewer时,当滚动到达ScrollViewer顶部或底部时,整个应用程序窗口会被拖动一点。是否可以禁用此行为?

3 个答案:

答案 0 :(得分:5)

我知道人们不喜欢仅链接答案,但我遇到了这个问题,并使用此链接来帮助:

C# wpf scrollviewer not working like windows store app

默认行为是滚动到顶部或底部或侧边限制时让应用程序反弹。使用ManipulationBoundaryFeedback事件并将其添加到后面的代码中。

  private void OnManipulationBoundaryFeedback(object sender, ManipulationBoundaryFeedbackEventArgs e)
        {
            e.Handled = true;
        }

答案 1 :(得分:0)

可能只是在事件冒泡之前处理事件(有关此信息,请参阅MSDN https://msdn.microsoft.com/library/ms742806(v=vs.100).aspx。)

订阅

 ScrollViewer.PreviewTouchUp

有了这个

private void UIElement_OnPreviewTouchUp(object sender, TouchEventArgs e)
{
    e.Handled = true;
}

答案 2 :(得分:0)

阅读完.NET源代码后,我发现了这一点:

public class CustomScrollViewer : ScrollViewer
{
    protected override void OnManipulationDelta(ManipulationDeltaEventArgs e)
    {
        base.OnManipulationDelta(e);
        e.ReportBoundaryFeedback(new ManipulationDelta(new Vector(0, 0), 0, new Vector(0, 0), new Vector(0, 0)));
    }
}

当用户尝试滚动太远时,会向操作系统报告其他增量,这会拦截该行为。确保对基础实现的调用是第一个。此外,如果您在模板中使用带有ScrollViewer的控件,则可以尝试订阅该事件,但我不能保证它会起作用。这都是谁最后报道的问题。