WPF DataGrid actual ColumnHeaderHeight
本文关键字:ColumnHeaderHeight actual DataGrid WPF | 更新日期: 2023-09-27 18:05:25
当我将WPF DataGrid的ColumnHeaderHeight设置为Auto (double.NaN)时,我如何获得列头的实际渲染高度?
我似乎找不到DataGrid类中的属性。
您可以通过在可视化树中搜索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 -这可能发生在网格的构建/刷新或关闭。我依稀记得应该有一个事件,当网格渲染完成时触发