WPF DataGrid实际的ColumnHeaderHeight

时间:2014-05-28 08:02:12

标签: c# wpf datagrid

当我将WPF DataGrid的ColumnHeaderHeight设置为Auto(double.NaN)时,如何获得列标题的实际渲染高度?

我似乎无法在DataGrid类中找到该属性。

2 个答案:

答案 0 :(得分:3)

您可以通过搜索DataGridColumnHeadersPresenter的可视树并阅读其ActualHeight属性来掌握它。

    var headersPresenter = FindVisualChild<DataGridColumnHeadersPresenter>(dataGrid);
    double actualHeight = headersPresenter.ActualHeight;

这是FindVisualChild方法。它也可以作为扩展方法实现。

public static T FindVisualChild<T>(DependencyObject current) where T : DependencyObject
{
    if (current == null) return null;
    int childrenCount = VisualTreeHelper.GetChildrenCount(current);
    for (int i = 0; i < childrenCount ; i++)
    {
        DependencyObject child = VisualTreeHelper.GetChild(current, i);
        if (child is T) return (T)child;
        T result = FindVisualChild<T>(child);
        if (result != null) return result;
    }
    return null;
}

答案 1 :(得分:0)

当我没记错的时候,该属性是一个附加属性 - 意味着应该在DataGridColumn上找到真正的值。

DataGridColumnHeader有一个单独的类,名称相同 - 请参阅:http://msdn.microsoft.com/de-de/library/system.windows.controls.primitives.datagridcolumnheader(v=vs.110).aspx

这个类可以通过单个DataGridColumns“Header”属性获得。 请参阅:http://msdn.microsoft.com/en-us/library/system.windows.controls.datagridcolumn.header(v=vs.110).aspx

所以我会抓住网格的第一列,将它的Header属性转换为DataGridColumnHeade并读取它的actualheight属性。

请确保警告Header属性或ActualHeight为空的情况 - 这可能在网格构建/刷新或关闭时发生。我朦胧地记得,当网格完全呈现时,应该会触发一个事件。