簡體   English   中英

在WPF中無法通過觸摸滾動

[英]Scrolling with touch not working in 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。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM