2010-02-12 18 views
0

我們使用Controls.PreviewContactDown,PreviewContactUp和PreviewContactChanged事件來捕獲在Surface上放置,移除和移動的標記項目,這在出現Simulator應用程序時效果很好與表面。向Surface控件的OnContactDown事件添加延遲

在實際表面上,如果您過快地移動標記項目,相機實際上會失去標記焦點,假定它已被移除,然後在停止移動時重新捕獲它。這爲我們的客戶提供了很差的體驗。

我建議的方法是覆蓋或創建一個新的事件,將響應標記的項目事件,但不會觸發事件處理程序,直到延遲......即如果「ContactUp」被觸發,請等待100ms然後執行事件處理程序。理想情況下,我們只希望能夠使用備用附加屬性來定義這些事件處理程序,即

<Panel local:TagDown="TagDownEventHandler" /> 

而如果我們可以得到它使用ICommand的對象,而不是事件處理會更好。

回答

2

如何使用TagVisualizer?這已經處理標籤丟失/發現給你一個默認淡出動畫之前,視覺從屏幕上移除。

它很難用手指做同樣的事情,因爲一旦失去聯繫,原有聯繫人和新聯繫人之間就沒有聯繫。

+0

TagVisualizer將無法正常工作那樣容易,因爲我們不知道具體是,我們正在使用什麼標籤,我敢肯定TagVisualizer需要指定要聽什麼標籤值 - 客戶端可以使用00-FF標籤的任何子集。 與此同時,TagVisualizer實際上可能會遭遇同樣的問題 - 我們的Dev表面單元會發生什麼,如果您以任何像樣的速度「拖動」帶標記的對象到表面上,那麼它實際上會丟棄對該對象的跟蹤 - I認爲這比其他任何內部攝像機的硬件限制更多。 – RTigger 2010-02-15 18:35:17

+0

如果你不知道什麼標籤,那麼只需要匹配所有的(你也可以用編程的方式來完成)?問題解決了。是的,丟失的聯繫人是一個根本性的問題......但正如我所說的,電視能夠繞過它,因爲它不會立即刪除視覺效果,所以如果它在移動過程中失去聯繫,一旦它重新檢測,就會順利地追蹤。 – Schneider 2010-02-15 23:55:14

1

我們發現與真實表面和接觸事件相同的東西。

我們所做的(這取決於您的需求)是爲「聯繫容器」創建一個基類,該容器擁有自己的方法來處理ContactUp,在這裏我們用一組包含eventArgs的定時器要刪除的對象/標記並將其添加到列表中。如果計時器打勾,那麼我們從容器和排隊列表中刪除對象/標記。

當contactDown觸發時,我們確認隊列中沒有匹配對象,如果我們停止計時器並將其從隊列中移除並忽略新標籤,因爲它仍然在容器中。如果不是,我們將處理放置的新標籤。

我們仍在調整代碼以確保它的健壯性,一旦如果我可以在Codeplex上發佈解決方案。

HTH