WPF DataGrid 如何动态设置单行高度

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了WPF DataGrid 如何动态设置单行高度相关的知识,希望对你有一定的参考价值。

WPF DataGrid 如何动态设置任意单行高度、字体、字号等样式,或者有什么控件替代DataGrid 也可以,在线等……

  方法一:根据ActualHeight设置Textblock的Height
  ActualHeight为元素的实际高度,与控件实际高度Height不同。
  在页面的LayoutUpdated事件里,设置TextBlock控件的Height等于其自身的ActualHeight。
  效果: 在DataGrid的行中没有起作用。
  Actual在其他地方可能会有奇效。
  方法二:在页面的LayoutUpdated事件里,设置DataGrid的RowHeight=double.NaN
参考技术A 动态设置是不是指通过交互去改变显示方式呢?!如果是这样,可以通过以下方式:
举个例子
通过SelectionChanged获取datagridrow对象可以这么写(dg为DataGrid名称,t为你选中的实体对象)
private void dg_SelectionChanged(object sender, SelectionChangedEventArgs e)

TestDemo t = dg.SelectedItem as TestDemo;
if (t != null)

DataGridRow dr = (DataGridRow)(dg.ItemContainerGenerator.ContainerFromItem(t));
dr.Background = new SolidColorBrush(Colors.Yellow);
dr.height= ...;

追问

有点差别,我从数据库里读出 DataTable 赋给 DataGrid ,可能包含几行数据,现在想后台直接设置前两行的高度,其他行不变,要怎么操作呢,顺便问一下这种情况调整单个列宽怎么做呢

追答

这样啊,就用一楼给的方法就行了。
在DataGrid的LoadingRow事件中判断是不是第一行和第二行,是的话设置e.Row.Height。
列宽设置放在前台设置就好啦。固定,自适应,auto都行的,默认是auto的。

追问

如果DataGrid中有几个列,我想后台直接设置前两列的宽度,问一下这种情况调整单个列宽怎么做啊?

追答

这个很简单,在DataGrid的Loaded事件中给Colums赋值就可以了。 举个例子,设前两列位宽度1:2的自适应宽度。
private void dataGrid1_Loaded(object sender, RoutedEventArgs e)

DataGrid dg = sender as DataGrid;

if (dg.Columns.Count == 2)



dg.Columns[0].Width =

new DataGridLength(100,DataGridLengthUnitType.Star);

dg.Columns[1].Width =

new DataGridLength(200, DataGridLengthUnitType.Star);



本回答被提问者和网友采纳
参考技术B 在DataGrid的LoadingRow事件中
使用 e.Row.Item里的数据进行判断,Item里的事这个行显示的数据。
如果找到想修改数据的行就进行修改。
比如:
e.Row.Height = double数字;
e.Row.FontSize = double数字;
等等Row能获取的属性都能修改。追问

如果DataGrid中有几个列,我想后台直接设置前两列的宽度,问一下这种情况调整单个列宽怎么做啊?

wpf如何让datagrid每一行重叠显示,一行叠在另外一行上面

取巧的方法就是使用分页控件,然后设置每页只显示1条数据,这样就能满足你的需要了。
但是在WPF貌似没有PagedCollectionView,所以你可以动态的去改变datagrid的绑定值,也就是每次只给它一条数据。

再或者你可以设置一下datagrid的高度,让它只能显示一行的数据,然后隐藏滚动条,最后通过设置纵向滚动条的偏移量来实现切换到第几行数据。

当然你也可以去重写或自定义一个ItemsPresenter控件.........
参考技术A 什么叫做一行叠在另外一行上面?有没有图可以说明下?追问

就是行不是上一行下一行的方式,而是一行覆盖另外一行,也就是说行不是上下排列,而是纵向(往里)排列的

追答

天。。。那你不是只能看到最外面的那一行数据。。。

追问

恩,我是要做一个车辆调度,一条直线,上面显示车辆在动(从左到右),我又不想动态生成控件的方法,想用datagrid绑定,大哥,你有好方法么

以上是关于WPF DataGrid 如何动态设置单行高度的主要内容,如果未能解决你的问题,请参考以下文章

如何在 WPF Datagrid 中动态更改字符串货币格式

WPF DataGrid根据内容设置行颜色

easyUi datagrid怎样设置行高度

WPF DataGrid - 如何设置正确的 DataTrigger 绑定到单元格的数据源(而不是行的源)

WPF MvvM DataGrid 动态列

WPF Datagrid 模板列编辑事件和交替列颜色