WPF数据表格实际列标题高度

6
当我将WPF DataGrid的ColumnHeaderHeight设置为Auto(double.NaN)时,如何获取列标题实际呈现的高度?我无法在DataGrid类中找到该属性。
2个回答

6

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

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

因此,我将获取网格的第一列,将其HeaderText转换为DataGridColumnHeader并读取其actualheight属性。

请确保防范Header属性或ActualHeight为空的情况 - 当网格正在构建/刷新或关闭时可能会发生此情况。 我模糊地记得,在网格完全渲染时会触发一个事件。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接