2012-02-10 38 views
3

注意:我已經找到了解決我的問題的方法,所以我將其作爲參考目的發佈,儘管我很樂意接受更好的解決方案。當點擊行時,Silverlight DataGrid MouseLeftButtonDown事件不會引發

我試圖鉤住UIElement.MouseLeftButtonDown提供關於Silverlight的DataGrid的雙擊功能,但是當我使用XAML或DataGrid.MouseLeftButtonDown +=語法訂閱DataGrid.MouseLeftButtonDown,當我點擊我的事件處理函數不是叫DataGrid中的行。如果我點擊標題,則會引發該事件。

如果我在父用戶控件水平訂閱同一事件,該事件處理函數調用成功,你會期望基於Silverlight RoutedEvents但我必須檢測是否發生在DataGrid上或其他地方的點擊。

如果我使用UIElement.AddHandler語法訂閱事件,如下所示,那麼它將按照預期的方式基於disposeEventsToo:true參數進行工作。

dataGrid.AddHandler(UIElement.MouseLeftButtonDownEvent, 
        new MouseButtonEventHandler(dataGrid_MouseLeftButtonDown) 
        , handledEventsToo: true); 

看來,DataGrid的實施標誌着這些事件作爲孩子UI元素的一個處理,防止事件冒泡,默認情況下,這是不是我所期待開始。有了更多的想法,我可以看到,點擊行爲驅動各種事物(選擇項目,編輯字段等),所以也許實現是有意義的。

回答

2

我有同樣的問題,我用的MouseLeftButtonUp其觸發事件,但使用clickCount值始終爲1

下面是該修復:

private const int MOUSE_SENSITIVITY = 300; 

private DateTime _previousClick; 

private void exceptionsDataGrid_MouseLeftButtonUp(object sender, MouseButtonEventArgs e) 
{ 
     DataGrid dg = (sender as DataGrid); 
     DateTime current=DateTime.Now; 
     LoggerService.Exception exception = (LoggerService.Exception)dg.SelectedItem; 
     if (_previousClick != null) 
     { 
      TimeSpan clickSpan = current - _previousClick; 
      if (clickSpan.TotalMilliseconds < MOUSE_SENSITIVITY) 
      { 
       MessageBox.Show("You double clicked!"); 
      } 
     } 
     _previousClick = current; 
} 
相關問題