2016-07-11 4 views
0

У меня есть UWP App, где я хочу обрабатывать ManipulationDelta или ManipulationUpdated и ManipulationCompleted на PointerWheelChanged события (для обработки горизонтальной прокрутки от мыши или сенсорного планшета).PointerWheelChanged событие с GestureRecognizer

PointerwheelChanged В случае, я сумел это с

gesture.ProcessMouseWheelEvent(e.GetCurrentPoint(this), false,false); 

где e является PointerRoutedEventArgs.

Код сниппета:

GestureRecognizer gesture = new GestureRecognizer(); 
gesture.ManipulationCompleted += OnManipulationCompleted; 
gesture.ManipulationUpdated += OnManipulationUpdated; 

void OnManipulationUpdated(object sender, ManipulationUpdatedEventArgs e) 
{ 
//Ideally this Should be called whenever there is a change in manipulation 
} 

void OnManipulationCompleted(object sender, ManipulationCompletedEventArgs e) 
    { 
    //Code for Scroll 
//Ideally this has to be called on completion of Manipulation Event(Correct me if am wrong) 
    } 


private void onPointerwheelChanged(object sender, PointerRoutedEventArgs e) 
{ 
gesture.ProcessMouseWheelEvent(e.GetIntermediatePoints((this) sender)[0], false, false); 
} 

Проблема с этим подходом является, когда onPointerwheelChanged события вызывается, ManipulationCompleted слишком уволена, несмотря на себя выполнение один длинный слайда в сенсорной панели (Палец был в контакте с сенсорной панелью целом через слайд).

В идеале только одно событие ManipulationCompleted должно быть запущено в конце одиночного длинного слайда. Но несколько событий ManipulationCompleted получают Triggered.

Есть ли выход из этого? Изготовление GestureRecognizer для стрельбы ManipulationCompleted Событие только в конце слайда?

+0

Привет! Отличный вопрос. Можете ли вы включить свой код, чтобы мы могли более точно увидеть, что происходит? Мы не можем отлаживать его без него.Спасибо –

+0

Вам нужно добавить свой код на свой вопрос. Пожалуйста, обратитесь к http://stackoverflow.com/help/how-to-ask, если вам нужна дополнительная информация о том, как задать вопрос, на который ответят люди. –

+0

Обновлено сообщение! – Highbrow

ответ

0

когда onPointerwheelChanged событие вызывается, ManipulationCompleted слишком уволен

Это ожидаемое поведение. По PointerWheelChanged event:

Если элемент, где происходят указатель события имеет значение ManipulationMode нестандартного, то действие может также привести к различным манипуляции событий, как ManipulationStarted.

Причина такого поведения объясняется here:

Кнопка мыши колесо имеет дискретные, равномерно распределенных вырезы или пороговые значения расстояния (называемые также стопоры). Когда вы поворачиваете или наклоняете колесо, сообщение о колесе отправляется по мере того, как встречается каждый стопор.

Итак, если вы хотите что-то обработать, когда пользователь закончил вращение колеса мыши. Я предлагаю вам следующие один из следующих вариантов:

  1. Если вы хотите, чтобы показать некоторые данные о событии (например положение сетки.). Обновляйте его каждый раз при срабатывании события ManipulationCompleted. Таким образом, пользователь увидит данные в режиме реального времени.

  2. Вы можете установить состояние для граничной точки (например, bool gridHitBoundary=false). В OnManipulationUpdated обновить состояние при ударе граничной точки и запустить логику в ManipulationCompleted, когда gridHitBoundary==true.

+0

I Wana реализовать бесконечный свиток, поэтому никаких границ! В любом случае .. спасибо за ответ! – Highbrow

Смежные вопросы