gpt4 book ai didi

c# - 以编程方式设置 DataGrid 行高属性

转载 作者:太空狗 更新时间:2023-10-30 00:43:59 25 4
gpt4 key购买 nike

我有一个关于 .NET 4.0 中标准 WPF DataGrid 的问题。

当我尝试使用简单代码以编程方式设置 DataGrid 网格行高时:

private void dataGrid1_LoadingRow(object sender, DataGridRowEventArgs e)
{
e.Row.Height = 120;
}

一切正常,直到我尝试像在 excel 中一样使用鼠标在用户界面上调整网格行的大小/侧面的标准方式/- 然后它似乎无法调整网格行的大小。它一直是 120。顺便说一句,它的内容都搞砸了......

就像 Sinead O'Connor 会说的:告诉我宝贝 - 我哪里做错了?

最佳答案

您不应该设置行本身的高度,因为它是通过标题等调整大小的。有一个属性 DataGrid.RowHeight,它允许您正确地执行此操作。

如果您需要有选择地设置高度,您可以创建一个样式并将 DataGridCellsPresenter 的高度绑定(bind)到您的项目的某些属性:

<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;
}

关于c# - 以编程方式设置 DataGrid 行高属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9044353/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com