c# - 在 WPF 数据网格中展开行

标签 c# wpf wpfdatagrid

我正在使用 DataGrid 来显示一些日志文件,其中每个单元格都包含一个 TextBlock。我需要帮助创建一种方法来扩展用户选择的行,如下所示:

http://dl.dropbox.com/u/5649690/StackOverflow%20-%20Do%20not%20delete/Expand%20row%20in%20wpf%20datagrid/Do%20want.png

这是我现在的代码。它基于被点击行的索引:

DataGridRow testrow = (DataGridRow)logBrowserDataGrid.ItemContainerGenerator.ContainerFromIndex(index);

logBrowserDataGrid.UpdateLayout();
logBrowserDataGrid.ScrollIntoView(logBrowserDataGrid.Items[index]);

testrow = (DataGridRow)logBrowserDataGrid.ItemContainerGenerator.ContainerFromIndex(index);
testrow.Height = 100;

但是这会产生一个奇怪的结果:

http://dl.dropbox.com/u/5649690/StackOverflow%20-%20Do%20not%20delete/Expand%20row%20in%20wpf%20datagrid/Do%20not%20want%20.png

你知道根据索引扩展行的好方法吗?

你知道我得到的奇怪结果是怎么回事吗?看起来我正在扩展该行的一部分,其余部分确实拉伸(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/

相关文章:

c# - 从多个列表中选择的方法

wpf - ContextMenu.PlacementTarget 在 WPF 中什么都不是

c# - 通过按键将 Dictionary<String, Int32> 绑定(bind)到 ListBox 并将选定的项目值绑定(bind)到 ComboBox

wpf - FrameworkElementFactory 必须位于此操作的密封模板中

c# - CommandParameter 多重绑定(bind)返回 DataGrid 控件和所选行中的自定义对象

c# - 如何通过 ViewModel 控制 View VisualState

c# - Entity Framework 导致超时错误

c# - Automapper 使用简单注入(inject)器 (Ioc) 将依赖项注入(inject)自定义类型转换器

C# WPF 设置焦点 TabItem

wpftoolkit - WPF DataGrid-如何在按Tab键后将键盘焦点移至新添加的行