2017-05-30 40 views
1

我試圖刪除一些內容到DataGrid中,刪除的內容必須映射到列上執行的刪除操作。如何獲取DataGrid水平滾動大小?

要做到這一點,我設置了我的Datagrid.AllowDrop = true並使用它的寬度屬性計算列。

private void DGrdDatosImportar_Drop(object sender, DragEventArgs e) 
{ 
    var dropPos = e.GetPosition(DGrdDatosImportar); 
    double RefPos = DGrdDatosImportar.RowHeaderActualWidth; 
    DataGridColumn SelecteCol = null; 
    foreach (DataGridColumn Col in DGrdDatosImportar.Columns.ToList()) 
    { 
     double ColWidth = Col.ActualWidth; 
     if (dropPos.X >= RefPos && dropPos.X <= (RefPos + ColWidth)) 
     { 
      SelecteCol = Col; 
      break; 
     } 
     RefPos += ColWidth; 
    } 

    if (SelecteCol != null) 
    { 
     if (e.Data.GetDataPresent("IImportProperty")) 
     { 
      ImportColumn ImpCol = (ImportColumn)SelecteCol; 
      IImportProperty prop = e.Data.GetData("IImportProperty") as IImportProperty; 
      Importar source = ((Importar)GrdMain.DataContext); 
      source.EmparecarColumna2Excel(prop, ImpCol.ColParms); 
     } 
    } 
} 

它適用於所有列適合我的屏幕,但是當執行水平滾動時失敗。

我正在尋找,讓我獲得了水平滾動進行,但無法找到任何東西,在每列相同,但沒有什麼:(

我該怎麼做才能得到的金額對我Datagrid的任何財產在我的DataGrid進行水平滾動

還有一個辦法,以獲取在其中執行我滴列?

回答

1

我該怎麼做才能讓我的DataGrid進行水平滾動的量?

您可以使用VisualTreeHelper類才能到DataGridScrollViewer元素的引用,然後訪問其HorizontalOffset屬性:

private void DGrdDatosImportar_Drop(object sender, RoutedEventArgs e) 
{ 
    ... 
    ScrollViewer sv = GetChildOfType<ScrollViewer>(DGrdDatosImportar); 
    if (sv != null) 
    { 
     double horizontalOffset = sv.HorizontalOffset; 
     //... 
    } 
} 

private static T GetChildOfType<T>(DependencyObject depObj) where T : DependencyObject 
{ 
    if (depObj == null) 
     return null; 

    for (int i = 0; i < VisualTreeHelper.GetChildrenCount(depObj); i++) 
    { 
     var child = VisualTreeHelper.GetChild(depObj, i); 

     var result = (child as T) ?? GetChildOfType<T>(child); 
     if (result != null) 
      return result; 
    } 
    return null; 
} 
+1

你救我的天!TKS –