我最近創建了一個自定義輸入板,用戶可以快速點擊按鈕(它基本上是一個自定義數字輸入板)。問題是,如果使用按鈕敲擊事件來註冊輸入鍵盤的處理程序,它的響應速度非常緩慢,以至於錯過了按鈕按壓(意味着如果我快速按下數字5五次,可能會出現兩次或三次)。將事件從「點擊」更改爲「點擊」(否則爲相同的代碼)會使輸入板完全響應。Winrt Xaml點擊響應速度緩慢,點擊響應迅速
爲什麼Tapped事件處理程序如此反應遲鈍,並且是否存在使用Tapped而不是Clicked處理程序的潛在影響?
我最近創建了一個自定義輸入板,用戶可以快速點擊按鈕(它基本上是一個自定義數字輸入板)。問題是,如果使用按鈕敲擊事件來註冊輸入鍵盤的處理程序,它的響應速度非常緩慢,以至於錯過了按鈕按壓(意味着如果我快速按下數字5五次,可能會出現兩次或三次)。將事件從「點擊」更改爲「點擊」(否則爲相同的代碼)會使輸入板完全響應。Winrt Xaml點擊響應速度緩慢,點擊響應迅速
爲什麼Tapped事件處理程序如此反應遲鈍,並且是否存在使用Tapped而不是Clicked處理程序的潛在影響?
我還沒有使用它來驗證,但它可能支持雙擊事件。也許如果你將IsDoubleTapEnabled
設置爲false
,那麼點擊事件將會更快進入。
這個答案真的來自Filip Skakun對他在這篇文章中給出的其他答案的評論,但爲了讓人們很容易找到答案,我將單獨發佈。如果菲利普編輯他的答案或將其作爲新帖子發佈,我會將其刪除,以便他可以成爲獲得信用的人。
對我而言,解決方案是使用PointerReleased
事件而不是Tapped
事件。當使用Tapped
時,如果點擊/點擊快速連續,我只收到大約一半的事件。但是,如果我使用PointerReleased
,那麼我收到了我所有的事件。
這裏有一個單獨的答案很好。我只想指出,單獨使用PointerReleased可能不夠,因爲您可能還想確保來自相同源的匹配「PointerPressed」在您的元素上引發,並且您可能需要調用'CapturePointer ()'。同時限制事件之間的最大時間也許是可取的。 –
這是一個非常好的主意,但不幸的是它不起作用。當IsDoubleTapEnabled設置爲false時,Tapped和Click之間仍然存在主要區別。想知道它有多糟,當我快速點擊數字1到9時,當使用點擊處理程序時,我得到所有數字,當使用Tapped時,只有一個或兩個數字與IsDoubleTapEnabled設置爲false。按鈕本身是RepeatButtons,如果這有什麼不同。 –
你能分享一下你在做什麼的代碼示例嗎? –
對不起,花了這麼長時間回覆。我花了一些時間嘗試重新創建,發現只有帶有文本塊和按鈕的簡單應用程序將重現此問題。每次點擊按鈕時,處理程序都會向文本塊添加一個字母。通過計算我點擊鼠標左鍵的次數,我可以比較實際的「水龍頭」數量和在文本塊中註冊爲字母的數量。我發現只有大約一半的水龍頭實際上導致對Tapped事件處理程序的調用。這是使用VS2013 express在調試模式(本地機器)下運行的。 –