我有一個WPF應用程序。有一個listview,其中每次我點擊或雙擊,點擊事件啓動。即使我保留Click事件,當我雙擊它時它也會自動啓動。如果我在DoubleClick中綁定該操作,則無法單擊。我們如何分離點擊並雙擊WPF應用程序中的listview?
如何分別處理兩者?
我有一個WPF應用程序。有一個listview,其中每次我點擊或雙擊,點擊事件啓動。即使我保留Click事件,當我雙擊它時它也會自動啓動。如果我在DoubleClick中綁定該操作,則無法單擊。我們如何分離點擊並雙擊WPF應用程序中的listview?
如何分別處理兩者?
一個處理程序添加到您的控制:
<SomeControl MouseDown="MyMouseHandler">
...
</SomeControl>
的處理程序代碼:
private void MyMouseHandler(object sender, MouseButtonEventArgs e)
{
if (e.ClickCount == 2)
{
//Handle here
}
}
我想你錯過了這個問題的重點:*「我點擊或雙擊,點擊事件觸發」* –
在這種情況下,它並不觸發MouseDown事件。 –
@ManfredRadlwimmer是的。感謝您獲得我的觀點。但事情是如果我使用MouseDown事件,它不會觸發,但PreviewMouseDown確實會觸發這兩個事件。 –
請嘗試下面的代碼片段:
if (e.ChangedButton == MouseButton.Left && e.ClickCount == 2) {
// your logic here
}
詳情試試這個link在MSDN上
我試過了,但是這在ListView中不起作用。我有一個列表視圖中的數據綁定。另外,如果我在MouseDown或MouseDoubleClick事件中綁定動作,我永遠不會獲得Clickcount值moew比1事件。 –
如果你正在處理MouseDown事件,那麼你應該考慮ClickCount。但是,如果您正在處理MouseDoubleClick事件,那麼(根據定義),應該只根據您的要求雙擊來處理它。 –
雙擊的第二次點擊根據定義總是前面是一個單擊。
如果你不想來處理它,你可以用一個定時器等待像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" ... />
[WPF ListView:附加雙擊(在一個項目上)事件]的可能重複(http://stackoverflow.com/questions/728205/wpf-listview-attaching-a-double-click-on-an-item-事件) –
*「我在這裏錯過了什麼嗎?」*不,這種行爲是有意的。 –
@ManfredRadlwimmer道歉,我不打算在這裏粗魯。 –