2012-01-17 93 views
1

我需要我的應用程序在DataGrid被雙擊時執行某個動作。如果雙擊滾動條,則不應執行該操作。所以我嘗試看看什麼是doubleclicked:檢查數據網格中是否雙擊滾動條

private void DataGrid_MouseDoubleClick(object sender, MouseButtonEventArgs e) 
     { 
      Point p = Mouse.GetPosition(this.DataGrid1); 
      IInputElement ie = this.DataGrid1.InputHitTest(p); 
     } 

但是當我雙擊一個滾動條,然後IInputElement似乎是所有種類的東西: Microsoft.Windows.Themes.ScrollChrome或System.Windows.Shapes.Rectangle。所以我不確定是否點擊了滾動條。

那麼如何檢查我是否真的雙擊滾動條?

回答

4

這裏沒有必要使用命中測試,只需通過遍歷視覺樹來檢查e.OriginalSource是否有父類型ScrollBar類型。這種方法存在一個潛在的問題 - 您的UI元素必須加載,無論如何處理鼠標事件通常都是這樣。 Heres'檢查UIElement是否具有特定類型的父代的代碼。

public static T GetParentOfType<T>(DependencyObject current) 
      where T : DependencyObject 
     { 
      for (DependencyObject parent = VisualTreeHelper.GetParent(current); 
       parent != null; 
       parent = VisualTreeHelper.GetParent(parent)) 
      { 
       T result = parent as T; 

       if (result != null) 
        return result; 
      } 

      return null; 
     } 
+0

感謝您的回答!順便說一句,如果我雙擊一個文本單元格,然後在e.OriginalSource中獲得一個TextBlock,並且VisualTreeHelper.GetParent爲它返回null。你知道爲什麼嗎? – 2012-01-17 15:20:50

+0

@ Bogdan0x400你通過什麼類型T? – 2012-01-17 15:22:38

+0

我不使用這段代碼,我只是嘗試VisualTreeHelper.GetParent(e.OriginalSource),當我雙擊一個單元格,它返回null,令我驚訝。 – 2012-01-17 15:28:21