如何获取WPF DataGrid的内部视图宽度?

时间:2011-01-03 13:18:01

标签: c# wpf datagrid

假设您有宽度= 100像素的DataGrid(标准),但是您有如此宽的列(以及许多),您必须水平滚动DataGrid(整个DataGrid,而不是单个列)才能读取内容。

+--------+ 
|very lon|
|<#=====>|
+--------+

我希望你能得到这张照片。好吧,正如我所说,DataGrid宽度为100像素,但如何获取DataGrid的视图宽度 - 显然它比DataGrid大?

编辑1

我遍历了DataGrid的可视树以获取它的ScrollViewer。接下来我读了ExtentWidth - 但是这个值太小了。如果我添加DataGrid的RowHeaderActualWidth,另一方面总和太大了。因此,必须有另一个因素(或者更完整,更可靠,更方便地读取DataGrid视图的内部宽度)。

3 个答案:

答案 0 :(得分:1)

目前我还没有4.0可用,但我猜你可以这样做:

private Double GetGridWidth(DataGrid grid)
{
    Double width = 0.0;
    foreach (DataGridColumn column in myDataGrid.Columns)
    {
        width += column.ActualWidth;
    }

    return width;
}

或使用LINQ:

private Double GetGridWidth(DataGrid grid)
{
    return grid.Columns.Sum(col => col.ActualWidth);
}

答案 1 :(得分:1)

我不知道回答是否为时已晚,但是对于一般知识,你可以通过

获得它
//in your class declaration
DataGrid gridInstance;

//in your method
Type type = typeof(DataGrid);
PropertyInfo pInfo = type.GetProperty("CellsPanelActualWidth", BindingFlags.NonPublic | BindingFlags.Instance);
double actualWpfWidth = (double)pInfo.GetValue(gridInstance, null);

答案 2 :(得分:0)

在Xaml中你可以使用,例如

class SubClass <E, K extends Collection<E>, V> implements Map<K, V>