我正在使用 DataGrid 来显示一些日志文件,其中每个单元格都包含一个 TextBlock。我需要帮助创建一种方法来扩展用户选择的行,如下所示:
这是我现在的代码。它基于被点击行的索引:
DataGridRow testrow = (DataGridRow)logBrowserDataGrid.ItemContainerGenerator.ContainerFromIndex(index);
logBrowserDataGrid.UpdateLayout();
logBrowserDataGrid.ScrollIntoView(logBrowserDataGrid.Items[index]);
testrow = (DataGridRow)logBrowserDataGrid.ItemContainerGenerator.ContainerFromIndex(index);
testrow.Height = 100;
但是这会产生一个奇怪的结果:
你知道根据索引扩展行的好方法吗?
你知道我得到的奇怪结果是怎么回事吗?看起来我正在扩展该行的一部分,其余部分确实拉伸(stretch)开来。我在运行时也研究过,可以看到它的高度是正确的100,但ActuallyHeight仍然是20。
附加信息: 行的默认大小由 DataGrid 上的 .RowHeight 属性设置。 我正在使用 AutoGenerateColumns 功能,并捕获 AutogeneratingColumn 事件以将列替换为 DataGridTemplateColumn。
最佳答案
为什么不用 Expander 替换默认的 DataGridCellTemplate 来为您完成所有这些工作?
<DataGridColumn>
<DataGridColumn.CellTemplate>
<DataTemplate>
<Expander Header="{Binding SomeText}">
<TextBlock TextWrapping="Wrap" Text="{Binding SomeText}" />
</Expander>
</DataTemplate>
</DataGridColumn.CellTemplate>
</DataGridColum>
如果您不喜欢默认的 Expander 外观,您可以覆盖它的模板,使其看起来像一个普通的 TextBlock
作为旁注,要拉伸(stretch)和垂直对齐 DataGridRow,您需要拉伸(stretch)和对齐单元格内容,而不是行。
关于c# - 在 WPF 数据网格中展开行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8165209/