Добавьте задержку к событиям OnContactDown для элементов управления Surface - PullRequest
0 голосов
/ 13 февраля 2010

Мы используем события Controls.PreviewContactDown, PreviewContactUp и PreviewContactChanged для захвата отмеченных элементов, помещаемых, удаляемых и перемещаемых на поверхность, что прекрасно работает в приложении Simulator, которое поставляется вместе с поверхностью.

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

То, что я предлагаю, - это способ переопределить или создать новое событие, которое будет реагировать на помеченные события элемента, но не запускать обработчик событий до истечения некоторой задержки ... т.е., если "ContactUp" срабатывает, подождите 100 мс Затем выполните обработчик события. В идеале мы бы просто могли использовать альтернативное присоединенное свойство для определения этих обработчиков событий, т.е.

<Panel local:TagDown="TagDownEventHandler" />  

И если бы мы могли заставить его использовать объекты ICommand вместо обработчиков событий, это было бы еще лучше.

Ответы [ 2 ]

2 голосов
/ 14 февраля 2010

Как насчет использования TagVisualizer? Это уже обрабатывает потерянный / найденный тег, предоставляя вам анимацию затухания по умолчанию перед удалением визуального элемента с экрана.

С пальцами труднее сделать то же самое, потому что после потери контакта между оригинальным контактом и новым нет никакой связи.

1 голос
/ 12 марта 2010

Мы нашли то же самое с реальной поверхностью и контактными событиями.

То, что мы сделали (и это будет зависеть от ваших потребностей), - это создание базового класса для «контейнера контактов», который имеет свой собственный метод обработки ContactUp, где мы запускаем таймер с набором eventArgs, которые содержат удаляемый объект / тег и добавляем его в список. Если таймер тикает, мы удаляем объект / тег из контейнера и списка в очереди.

Когда срабатывает contactDown, мы подтверждаем, что в очереди нет подходящего объекта, если есть, мы останавливаем таймер, удаляем его из очереди и игнорируем новый тег, так как он все еще находится в контейнере. Если нет, то мы обрабатываем новый размещаемый тег.

Мы все еще дорабатываем код, чтобы обеспечить его надежность, и если я смогу, я опубликую решение в Codeplex.

НТН

...