0

我们正在使用 Controls.PreviewContactDown、PreviewContactUp 和 PreviewContactChanged 事件来捕获在 Surface 上放置、移除和移动的标记项目,这在 Surface 附带的 Simulator 应用程序中效果很好。

在实际的 Surface 上,如果您移动带标签的项目太快,相机实际上会失去标签的焦点,假设它已被移除,然后在停止移动时重新捕获它。这为我们的客户提供了非常糟糕的体验。

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

<Panel local:TagDown="TagDownEventHandler" />  

如果我们可以让它使用 ICommand 对象而不是事件处理程序,那就更好了。

4

2 回答 2

2

只使用 TagVisualizer 怎么样?这已经通过在从屏幕上删除视觉对象之前为您提供默认的淡出动画来处理标签丢失/找到。

用手指做同样的事情就更难了,因为一旦失去联系,原来的联系和新的联系就没有联系了。

于 2010-02-14T03:08:44.693 回答
1

我们在真实的 Surface 和接触事件中发现了同样的情况。

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

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

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

高温高压

于 2010-03-12T06:35:35.837 回答