向Surface控件的OnContactDown事件添加延迟

问题描述:

我们使用Controls.PreviewContactDown,PreviewContactUp和PreviewContactChanged事件来捕获在Surface上放置,移除和移动的标记项目,这在出现Simulator应用程序时效果很好与表面。向Surface控件的OnContactDown事件添加延迟

在实际表面上,如果您过快地移动标记项目,相机实际上会失去标记焦点,假定它已被移除,然后在停止移动时重新捕获它。这为我们的客户提供了很差的体验。

我建议的方法是覆盖或创建一个新的事件,将响应标记的项目事件,但不会触发事件处理程序,直到延迟......即如果“ContactUp”被触发,请等待100ms然后执行事件处理程序。理想情况下,我们只希望能够使用备用附加属性来定义这些事件处理程序,即

<Panel local:TagDown="TagDownEventHandler" /> 

而如果我们可以得到它使用ICommand的对象,而不是事件处理会更好。

如何使用TagVisualizer?这已经处理标签丢失/发现给你一个默认淡出动画之前,视觉从屏幕上移除。

它很难用手指做同样的事情,因为一旦失去联系,原有联系人和新联系人之间就没有联系。

+0

TagVisualizer将无法正常工作那样容易,因为我们不知道具体是,我们正在使用什么标签,我敢肯定TagVisualizer需要指定要听什么标签值 - 客户端可以使用00-FF标签的任何子集。 与此同时,TagVisualizer实际上可能会遭遇同样的问题 - 我们的Dev表面单元会发生什么,如果您以任何像样的速度“拖动”带标记的对象到表面上,那么它实际上会丢弃对该对象的跟踪 - I认为这比其他任何内部摄像机的硬件限制更多。 – RTigger 2010-02-15 18:35:17

+0

如果你不知道什么标签,那么只需要匹配所有的(你也可以用编程的方式来完成)?问题解决了。是的,丢失的联系人是一个根本性的问题......但正如我所说的,电视能够绕过它,因为它不会立即删除视觉效果,所以如果它在移动过程中失去联系,一旦它重新检测,就会顺利地追踪。 – Schneider 2010-02-15 23:55:14

我们发现与真实表面和接触事件相同的东西。

我们所做的(这取决于您的需求)是为“联系容器”创建一个基类,该容器拥有自己的方法来处理ContactUp,在这里我们用一组包含eventArgs的定时器要删除的对象/标记并将其添加到列表中。如果计时器打勾,那么我们从容器和排队列表中删除对象/标记。

当contactDown触发时,我们确认队列中没有匹配对象,如果我们停止计时器并将其从队列中移除并忽略新标签,因为它仍然在容器中。如果不是,我们将处理放置的新标签。

我们仍在调整代码以确保它的健壮性,一旦如果我可以在Codeplex上发布解决方案。

HTH