2010-02-12 5 views
0

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

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

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

<Panel local:TagDown="TagDownEventHandler" /> 

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

ответ

2

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

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

+0

TagVisualizer не будет работать так же легко, потому что мы не знаем конкретно, какие теги мы работаем, и я уверен, что TagVisualizer требует, чтобы указать, какие значения тегов для прослушивания - клиент может использоваться любое подмножество меток 00-FF. В то же время у TagVisualizer действительно может возникнуть одна и та же проблема: что происходит на нашем блоке Dev-dev, если вы «перетаскиваете» объект с тегами по поверхности при любой приличной скорости, на самом деле он удаляет отслеживание этого объекта - I подумайте, что это скорее аппаратное ограничение внутренних камер, чем что-либо еще. – RTigger

+0

Если вы не знаете, какой тег, то как насчет соответствия всего (вы можете сделать это тоже программно)? Задача решена. Да, падающие контакты - основная проблема ... но, как я сказал, телевизор обходит его, потому что он не сразу удаляет визуальные эффекты, поэтому, если он теряет контакт, а перемещается, он плавно отслеживает его после его повторного обнаружения. – Schneider

1

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

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

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

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

НТН