c# - 触摸滚动在 WPF 中不起作用

标签 c# .net wpf

我有一个 WPF 应用程序,其中一部分我有一张显示 Javascript 的卡片。我的问题是我无法用鼠标在 Javascript 卡片上滚动,因为它吞没了事件。我通过连接到 UIElement 发送的 PreviewMouseWheel 事件(此处描述)解决了这个问题:

protected void AddListeners(BorderedCanvas borderedCanvas)
{
    borderedCanvas.PreviewMouseWheel += PreviewMouseWheel;
}

protected void RemoveListeners(BorderedCanvas borderedCanvas)
{
    borderedCanvas.PreviewMouseWheel -= PreviewMouseWheel;
}

protected static void PreviewMouseWheel(object sender, MouseWheelEventArgs e)
{
    if (!e.Handled)
    {
        e.Handled = true;

        var eventArg =
            new MouseWheelEventArgs(e.MouseDevice, e.Timestamp, e.Delta)
            {
                RoutedEvent = UIElement.MouseWheelEvent,
                Source = sender
            };

        var parent = VisualTreeHelper.GetParent((UIElement)sender) as UIElement;
        parent?.RaiseEvent(eventArg);
    }
}

现在,使用鼠标滚动效果非常好。

但是,触摸滚动不起作用。

所以,我修改了AddListeners:

    protected void AddListeners(BorderedCanvas borderedCanvas)
    {
        borderedCanvas.PreviewMouseWheel += PreviewMouseWheel;
        borderedCanvas.PreviewTouchDown += new EventHandler<TouchEventArgs>(OnTouchDown);
        borderedCanvas.PreviewTouchMove += new EventHandler<TouchEventArgs>(OnTouchMove);
    }

我添加了这些方法:

    protected static void OnTouchDown(object sender, TouchEventArgs e)
    {
        if (!e.Handled)
        {
            e.Handled = true;

            var eventArg =
                new TouchEventArgs(e.TouchDevice, e.Timestamp)
                {
                    RoutedEvent = UIElement.TouchDownEvent,
                    Source = sender
                };

            var parent = VisualTreeHelper.GetParent((UIElement)sender) as UIElement;
            parent?.RaiseEvent(eventArg);
        }
    }

    protected static void OnTouchMove(object sender, TouchEventArgs e)
    {
        if (!e.Handled)
        {
            e.Handled = true;

            var eventArg =
                new TouchEventArgs(e.TouchDevice, e.Timestamp)
                {
                    RoutedEvent = UIElement.TouchMoveEvent,
                    Source = sender
                };

            var parent = VisualTreeHelper.GetParent((UIElement)sender) as UIElement;
            parent?.RaiseEvent(eventArg);
        }
    }

但是,触摸滚动仍然不起作用。

知道我做错了什么吗?

对我来说,我似乎以类似的方式处理鼠标滚动和触摸滚动,但第一个有效而第二个无效。

最佳答案

您需要设置 ScrollViewer.PanningMode 以使其与触摸一起工作。

<ScrollViewer PanningMode="Both"/>

PanningMode 的默认值为 None。

关于c# - 触摸滚动在 WPF 中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50811546/

相关文章:

c# - ASP.NET Core - 使用 Windows 身份验证进行授权

c# - 具有内部类对象的抽象类构造函数继承

c# - OpenXML:为什么 docx 文件中有这些 <mc:Choice> 和 <mc:Fallback> 元素?

.net - DNX (rc1) Web 命令不起作用

c# - 如何在不重新打开文件的情况下读取然后写入/附加到文本文件?

c# - 无法将用户控件放在窗体上

c# - XAML- 如何将图像添加到 <TabControl> 标记

c# - 如何合并集合中的两个源并在组合框中正确显示它们?

c# - 如何将 List<model> 从 MVC4 中的 View 传递到 Controller ?

c# - 如何在 Xaml 中传递 "command parameter"中的两个枚举值并在 CS 文件中获取这些值