Подтвердить что ты не робот

Touch Scrolling ScrollViewer в приложении WPF с отключенным RealTimeStylus

Мы работаем над приложением WPF 4.5, которое будет работать на компьютерах под управлением Windows 8 с сенсорными мониторами.

Мы отключили поддержку RealTimeStylus после инструкций на MSDN, так как у нас есть некоторые представления, которым нужна поддержка мультитач через WM_TOUCH.

Проблема заключается в том, что отключение поддержки RealTimeStylus также отключает возможность пользователя прокручивать ScrollViewer с помощью касания - обычно пользователь может обходить ScrollViewers пальцами, но если поддержка RealTimeStylus отключена, это не представляется возможным это. Для ScrollViewer PanningMode установлено значение "Both".

Можно ли объединить эти вещи в приложении WPF или они являются взаимоисключающими?

4b9b3361

Ответ 1

Другой вариант - добавить кнопки со стрелками вокруг содержимого. Мы использовали это для большого эффекта на киоске с сенсорным экраном. Это немного больше работы, но может быть сделано в пользовательский элемент управления. Единственный код, который поддерживает вертикальная прокрутка.

Также должно быть достаточно легко добавить горизонтальную прокрутку. В приведенном ниже коде есть две кнопки, называемые "Меньше и выше" выше и ниже скроллера.

    double Epsilon = .001;

    private void Scroller_ScrollChanged(object sender, ScrollChangedEventArgs e)
    {
        if ( Scroller.ScrollableHeight > 0 ) {
            Less.Visibility = Math.Abs(Scroller.VerticalOffset - 0) > Epsilon ? Visibility.Visible : Visibility.Hidden;
            More.Visibility = Scroller.VerticalOffset + Scroller.ViewportHeight < Scroller.ExtentHeight ? Visibility.Visible : Visibility.Hidden;
        } else {
            Less.Visibility = More.Visibility = Visibility.Hidden;
        }

        if (Scroller.ExtentHeight / Scroller.ViewportHeight > 2)
        {
            SearchPanel.Visibility = Visibility.Visible;
        }
    }

    private void Less_Click(object sender, RoutedEventArgs e)
    {
        Sounds.Click();
        Scroller.PageUp();
    }

    private void More_Click(object sender, RoutedEventArgs e)
    {
        Sounds.Click();
        Scroller.PageDown();
    }

Ответ 2

Вы можете попробовать SurfaceScrollViewer вместо обычного ScrollViewer.

SurfaceScrollViewer