WPF C# touch scroll 正在拖动整个window

WPF C# touch scroll is dragging the whole window

我正在开发支持触摸屏的 WPF 应用程序,但我遇到了一个问题:使用触摸屏滚动 ScrollViewer 时,当滚动到 [=11] 时,整个应用程序 window 被稍微拖动了=] 顶部或底部。是否可以禁用此行为?

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

订阅

 ScrollViewer.PreviewTouchUp

有了这个

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

通读 .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 的控件,您可以尝试订阅该事件,但我不能保证它会起作用。这完全取决于谁最后报告。

我知道人们不喜欢 link 只有答案,但我遇到了这个问题并使用这个 link 来帮忙:

C# wpf scrollviewer not working like windows store app

默认行为是当您滚动到顶部或底部或左右限制时让您的应用弹跳。使用 ManipulationBoundaryFeedback 事件并将其添加到后面的代码中。

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