WinRT, C#, холст и детская инерционная прокрутка
Ситуация: WinRT приложение, холст на главной странице. На холсте много детей. Когда пользователь нажимает на холст и перемещает указатель, я пытаюсь их прокрутить. Все отлично работает, но я не знаю, как имитировать инерционную прокрутку.
Код:
private GestureRecognizer gr = new GestureRecognizer();
public MainPage()
{
this.InitializeComponent();
gr.GestureSettings = GestureSettings.ManipulationTranslateInertia;
gr.AutoProcessInertia = true;
}
Я подписался на некоторые события холста:
//Pressed
private void Canvas_PointerPressed(object sender, PointerRoutedEventArgs e)
{
if (e.Pointer.PointerDeviceType == Windows.Devices.Input.PointerDeviceType.Touch)
{
var _ps = e.GetIntermediatePoints(cnvMain);
if (_ps != null && _ps.Count > 0)
{
gr.ProcessDownEvent(_ps[0]);
e.Handled = true;
Debug.WriteLine("Pressed");
}
initialPoint = e.GetCurrentPoint(cnvMain).Position.X;
}
}
//Released
private void Canvas_PointerReleased(object sender, PointerRoutedEventArgs e)
{
if (e.Pointer.PointerDeviceType == Windows.Devices.Input.PointerDeviceType.Touch)
{
var _ps = e.GetIntermediatePoints(cnvMain);
if (_ps != null && _ps.Count > 0)
{
gr.ProcessUpEvent(_ps[0]);
e.Handled = true;
Debug.WriteLine("Released");
}
}
// Moved
private void Canvas_PointerMoved(object sender, PointerRoutedEventArgs e)
{
if (gr.IsActive || gr.IsInertial)
{
gr.ProcessMoveEvents(e.GetIntermediatePoints(null));
// Here is my code for translation of children
e.Handled = true;
}
}
Итак, я могу перевести полотно детей, но инерции нет. Как я могу включить это?
К сожалению, я не могу использовать что-то вроде GridView или ListView в этом приложении из-за конкретных данных.
Спасибо.
1 ответ
Вы должны использовать GestureRecognizer
с ManipulationInertiaStarting
, Это должно дать вам достаточно информации для реализации инерционной прокрутки.