2017-01-19 35 views
1

我有一些按鈕,它們充當數量的+/-步進控件。窗口的默認行爲是吸收了自來水,如果它被認爲是雙擊並不會觸發一個第二排放事件:如何獲得XAML按鈕點擊事件觸發所有的水龍頭?

如果用戶的交互也觸發DoubleTapped,螺紋將火首先代表第一次輕觸,但第二次點擊不會觸發額外的Tapped。

但是,這爲步進按鈕提供了非常差的用戶體驗。用戶應該能夠儘可能快地點擊它,並且它應該每次遞增計數器,而不是像現在這樣每增加一次。

奇怪的是我找不到如何在任何地方做到這一點。起初我以爲自己擁有IsDoubleTapEnabled的財產,但這可悲的是降低了所有。完全相同的行爲,無論它是打開還是關閉。

+2

一個簡單的解決方法是設置button.MouseDoubleClick + = increment();或者你用於點擊事件的任何課程。這樣他們都觸發相同的方法。確保在「初始化」部分中只做一次,否則最終會爲每次雙擊事件激活多次增量方法。 –

+1

我想到這一點,但感覺超級哈克,我想看看,如果確實有一個「正確」的方式做到這一點。 – devios1

+0

這種疼痛是由於該雙擊處理程序具有不同的簽名,所以你甚至不能共享相同的方法的事實加劇。 – devios1

回答

2

有一種更簡單的方法 - 使用內置RepeatButton來代替。它甚至自動處理按下狀態,所以你可以按住它不斷改變值。

1

實現此目的的一種方法是在雙擊處理程序中調用單擊事件。只有當你不希望arguments通過事件傳遞時才能完成。

儘管目前並不需要數據,但總是很好,你永遠不知道什麼時候以及什麼時候要擴展,所以你可以創建一個簡單的BridgeClass,因爲我喜歡稱它,這有助於在兩個事件之間傳輸數據,然後調用一個方法。下面的代碼不完全一樣:

在後面的代碼:

int counter = 0; 

    private void Button_Tapped(object sender, TappedRoutedEventArgs e) 
    { 
     MyTappedClass SingleTapInstance = new MyTappedClass() 
     { 
      Handled = e.Handled, 
      OriginalSource = e.OriginalSource, 
      PointerDeviceType = e.PointerDeviceType 
     }; 
     HandleBothTapEvents(SingleTapInstance); 
    } 

    private void Button_DoubleTapped(object sender, DoubleTappedRoutedEventArgs e) 
    { 
     MyTappedClass DoubleTapInstance = new MyTappedClass() 
     { 
      Handled = e.Handled, 
      OriginalSource = e.OriginalSource, 
      PointerDeviceType = e.PointerDeviceType 
     }; 
     HandleBothTapEvents(DoubleTapInstance); 
    } 

    private void HandleBothTapEvents(MyTappedClass TapData) 
    { 
     if (TapData != null) 
     { 
      counter++; 
      Hello.Content = counter.ToString(); 
     } 
     else 
      throw new Exception("No Tap event data transfered"); 
    } 

的支撐類

,並在任何你想要把它的BridgeClass。我的建議把它放在幫助文件夾(如果有的話)。

public class MyTappedClass 
{ 
    public object OriginalSource { get; set; } 

    public PointerDeviceType PointerDeviceType { get; set; } 

    public bool Handled { get; set; } 

} 

注:這僅僅是一個快速的解決方法是將工作非常好,我不知道是否有實現這一目標的傳統方式,但再有就是編程沒有唯一正確的答案,所以我想你可以使用這個。通過使用Interfaces在兩個事件之間傳輸數據,而不是在BridgeClass之間傳輸數據,可以使功能更加通用,因爲接口的設計目的也是相同的。

0

IsDoubleTapEnabled屬性應該做你想要什麼,但很多人往往錯過了事實,如果你有一個事件處理程序上控制DoubleTap事件設置此被自動設置爲true。如果您有一組事件,請移除事件處理程序,並且您應該能夠快速連續獲取所有點擊事件。

相關問題