我正在听几个事件来处理Windows(Phone)8.1运行时代码中的触摸输入。只要不涉及ScrollViewer
,这种方法就可以正常工作。由于Direct Manipulation,ScrollViewer
会吞下所有手势事件。
以下是我现在收听的事件(view
是FrameworkElement
):
var cw = Window.Current.CoreWindow;
cw.PointerPressed += OnPointerPressed;
cw.PointerMoved += OnPointerMoved;
cw.PointerReleased += OnPointerReleased;
cw.PointerCaptureLost += OnPointerCaptureLost;
view.Tapped += onTap;
view.DoubleTapped += onDoubleTap;
view.Holding += onHold;
view.ManipulationDelta += onManipulationDelta;
view.ManipulationCompleted += onManipulationCompleted;
一旦ScrollViewer
识别出一个点击,我就会得到一个PointerCaptureLost并且不再调用其他事件处理程序。
不幸的是,如果应用程序需要滚动和手势(例如,针对滚动检测CrossSlides),则没有好的解决方案。在这种情况下,到处获取指针消息的唯一选择是在所有地方禁用直接操作,但也禁用滚动。要获得该功能,应用程序将需要检测滚动手势本身,然后使用ScrollToHorizontalOffset或ScrollToVerticalOffset或通过更新SelectedIndex将ScrollViewer导航到新位置。这很棘手,并且比让ScrollViewer做它的事情要慢得多。如果可能的话应该避免。
在此期间有变化吗?有人知道这样做的样本吗?
我正在编写一个抽象,将手势事件转换为不同的事件。用户可以在其中放置任何控件,我也不知道,他可以用它做什么。所以我不能放慢它只是为了获得手势事件。
ScrollViewer
旁边是否还有其他类似行为的控件?
Windows.UI.Input.GestureRecognizer
有帮助吗?由于UIElement
已经提供了我需要的所有事件,我没有尝试过 - 我不明白为什么要这样做。
答案 0 :(得分:0)
为什么不在ScrollViewer上方使用一些透明层,然后将事件转发给它(在完成处理之后,或者等待它首先处理它们,但是记住它们之后也要对它们采取行动)?