MouseDoubleClick & Touch на ScatterViewItem
Я разрабатываю сенсорное приложение WPF4, в котором используются некоторые элементы управления Microsoft Surface. Я хотел бы поймать событие MouseDoubleClick для ScatterViewItem. Событие происходит, когда я использую мышь, но когда я использую свой палец, событие никогда не возникает. Зачем?
Большое спасибо.
ОБНОВЛЕНИЕ:
Наконец, я написал этот код для воспроизведения простого двойного касания с событием TouchLeave на ограниченном прямоугольнике (ширина и высота 16 пикселей) и 500 мс в течение требуемого времени между двумя событиями TouchLeave. Этот код не оптимизирован, но он работает, если у вас есть замечания, не стесняйтесь:)
private bool _doubleHasTimeAndPos = false;
private TimeSpan? _doubleTouchTime = null;
private Point? _doubleTouchPoint = null;
private void ScatterViewItem_TouchLeave(object sender, TouchEventArgs e)
{
if (!this._doubleHasTimeAndPos)
{
this._doubleTouchTime = DateTime.Now.TimeOfDay;
this._doubleTouchPoint = e.GetTouchPoint(this.scatterView).Position;
this._doubleHasTimeAndPos = true;
}
else
{
if (DateTime.Now.TimeOfDay.Subtract(this._doubleTouchTime.Value).TotalMilliseconds <= 500)
{
Point touchPoint = e.GetTouchPoint(this.scatterView).Position;
double xDelta = Math.Abs(this._doubleTouchPoint.Value.X - touchPoint.X);
double yDelta = Math.Abs(this._doubleTouchPoint.Value.Y - touchPoint.Y);
if (xDelta <= 16 && yDelta <= 16)
{
// DOUBLE TAP here !
}
}
this._doubleTouchTime = null;
this._doubleTouchPoint = null;
this._doubleHasTimeAndPos = false;
}
}
2 ответа
На уровне API события касания не будут генерировать события двойного щелчка.
Более того, руководящие принципы разработки Microsoft Surface UI (заявление об отказе: я помогал им в написании) на самом деле настоятельно не соответствуют концепции "двойного нажатия". Touch предназначен для того, чтобы предоставить пользователю более "естественный" способ взаимодействия с технологией без необходимости какого-либо обучения, документирования или запоминания "скрытых" функций. Двойное касание - это не взаимодействие людей в физическом мире, и это не то, для чего существуют какие-либо визуальные возможности. Следовательно, это не подходит для использования в программных приложениях. Apple согласна с этой философией, кстати - вы не увидите никаких двойных нажатий на iPhone или iPad.
Просто предположение из-за отсутствия сенсорной инфраструктуры для тестирования этого кода...
WPF рекомендует использовать вложенное событие Mouse.MouseDown для любого UIElement, а затем использовать ((MouseButtonEventArgs)e.ClickCount) для проверки значения 2 для двойного щелчка.
<ScatterViewItem Mouse.MouseDown="MouseButtonEventHandler" ... />
А потом
private void MouseButtonDownHandler(object sender, MouseButtonEventArgs e)
{
if (e.ClickCount == 2)
{
//// Its a double click... should work for touch.
}
}
Дайте мне знать, если это работает....