WPF DataGrid实际的ColumnHeaderHeight

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

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

您可以通过在可视树中搜索DataGridColumnHeadersPresenter并读取其ActualHeight属性来获取它。

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

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

 public static T FindVisualChild(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(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属性转换为DataGridColumnHeade并读取其actualheight属性。

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