WPF DataGrid actual ColumnHeaderHeight

本文关键字:ColumnHeaderHeight actual DataGrid WPF | 更新日期: 2023-09-27 18:05:25

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

我似乎找不到DataGrid类中的属性。

WPF DataGrid actual ColumnHeaderHeight

您可以通过在可视化树中搜索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;
}

如果我没记错的话,属性是一个附加属性-这意味着实际值应该在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属性为DataGridColumnHeaderand读取它的actualheight属性。

请确保保护的情况下,Header属性或ActualHeight为null -这可能发生在网格的构建/刷新或关闭。我依稀记得应该有一个事件,当网格渲染完成时触发

相关文章:
  • 没有找到相关文章