我有一个关于.NET 4.0中标准WPF DataGrid的问题。
当我尝试使用简单代码设置DataGrid网格行高度时:
private void dataGrid1_LoadingRow(object sender, DataGridRowEventArgs e)
{
e.Row.Height = 120;
}
一切顺利,直到我尝试使用excel /中的鼠标在用户界面/标准方式上调整网格行 - 然后显示网格行无法调整大小。它只是保持120.它的内容按所有方式搞砸......
像Sinead O'Connor会说的那样:告诉我宝贝 - 我哪里出错了?答案 0 :(得分:4)
你不是要设置行本身的高度,因为它通过标题等来调整大小。有一个属性DataGrid.RowHeight
,允许您正确执行此操作。
如果您需要有选择地设置高度,可以创建样式并将DataGridCellsPresenter
的高度绑定到项目的某些属性:
<DataGrid.Resources>
<Style TargetType="DataGridCellsPresenter">
<Setter Property="Height" Value="{Binding RowHeight}" />
</Style>
</DataGrid.Resources>
或者你可以从视觉树中获取演示者(我不推荐这个)并在那里指定一个高度:
// In LoadingRow the presenter will not be there yet.
e.Row.Loaded += (s, _) =>
{
var cellsPresenter = e.Row.FindChildOfType<DataGridCellsPresenter>();
cellsPresenter.Height = 120;
};
其中FindChildOfType
是一个可以像这样定义的扩展方法:
public static T FindChildOfType<T>(this DependencyObject dpo) where T : DependencyObject
{
int cCount = VisualTreeHelper.GetChildrenCount(dpo);
for (int i = 0; i < cCount; i++)
{
var child = VisualTreeHelper.GetChild(dpo, i);
if (child.GetType() == typeof(T))
{
return child as T;
}
else
{
var subChild = child.FindChildOfType<T>();
if (subChild != null) return subChild;
}
}
return null;
}