2017-01-30 74 views
0

我有一個WPF應用程序。有一個listview,其中每次我點擊或雙擊,點擊事件啓動。即使我保留Click事件,當我雙擊它時它也會自動啓動。如果我在DoubleClick中綁定該操作,則無法單擊。我們如何分離點擊並雙擊WPF應用程序中的listview?

如何分別處理兩者?

+0

[WPF ListView:附加雙擊(在一個項目上)事件]的可能重複(http://stackoverflow.com/questions/728205/wpf-listview-attaching-a-double-click-on-an-item-事件) –

+0

*「我在這裏錯過了什麼嗎?」*不,這種行爲是有意的。 –

+0

@ManfredRadlwimmer道歉,我不打算在這裏粗魯。 –

回答

0

一個處理程序添加到您的控制:

<SomeControl MouseDown="MyMouseHandler"> 
... 
</SomeControl> 

的處理程序代碼:

private void MyMouseHandler(object sender, MouseButtonEventArgs e) 
{ 
    if (e.ClickCount == 2) 
    { 
     //Handle here 
    } 
} 
+0

我想你錯過了這個問題的重點:*「我點擊或雙擊,點擊事件觸發」* –

+0

在這種情況下,它並不觸發MouseDown事件。 –

+0

@ManfredRadlwimmer是的。感謝您獲得我的觀點。但事情是如果我使用MouseDown事件,它不會觸發,但PreviewMouseDown確實會觸發這兩個事件。 –

0

請嘗試下面的代碼片段:

 if (e.ChangedButton == MouseButton.Left && e.ClickCount == 2) { 
     // your logic here 
    } 

詳情試試這個link在MSDN上

+0

我試過了,但是這在ListView中不起作用。我有一個列表視圖中的數據綁定。另外,如果我在MouseDown或MouseDoubleClick事件中綁定動作,我永遠不會獲得Clickcount值moew比1事件。 –

+0

如果你正在處理MouseDown事件,那麼你應該考慮ClickCount。但是,如果您正在處理MouseDoubleClick事件,那麼(根據定義),應該只根據您的要求雙擊來處理它。 –

0

雙擊的第二次點擊根據定義總是前面是一個單擊。

如果你不想來處理它,你可以用一個定時器等待像200毫秒,看看是否有另一個點擊之前您實際上處理該事件:

public partial class MainWindow : Window 
{ 
    System.Windows.Threading.DispatcherTimer _timer = new System.Windows.Threading.DispatcherTimer(); 
    public MainWindow() 
    { 
     InitializeComponent(); 
     _timer.Interval = TimeSpan.FromSeconds(0.2); //wait for the other click for 200ms 
     _timer.Tick += _timer_Tick; 
    } 

    private void lv_PreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e) 
    { 
     if(e.ClickCount == 2) 
     { 
      _timer.Stop(); 
      System.Diagnostics.Debug.WriteLine("double click"); //handle the double click event here... 
     } 
     else 
     { 
      _timer.Start(); 
     } 
    } 

    private void _timer_Tick(object sender, EventArgs e) 
    { 
     System.Diagnostics.Debug.WriteLine("click"); //handle the Click event here... 
     _timer.Stop(); 
    } 
} 

<ListView PreviewMouseLeftButtonDown="lv_PreviewMouseLeftButtonDown" ... />