【问题标题】:How to get DataGrid Horizontal Scrolled size?如何获取 DataGrid 水平滚动大小?
【发布时间】:2017-05-30 13:50:25
【问题描述】:

我正在尝试将一些内容拖放到 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 中执行的水平滚动 量?

还有另一种方法来获取执行我的放置的列吗?

【问题讨论】:

    标签: c# wpf 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;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-06-27
      • 2014-12-08
      • 1970-01-01
      • 2023-03-22
      • 1970-01-01
      • 1970-01-01
      • 2011-08-31
      • 1970-01-01
      相关资源
      最近更新 更多