手风琴高度问题中的WPF DataGrid

Posted

技术标签:

【中文标题】手风琴高度问题中的WPF DataGrid【英文标题】:WPF DataGrid inside Accordion height issue 【发布时间】:2011-01-27 13:00:50 【问题描述】:

我正在使用最新的WPF Toolkit,但是当我在AccordionItem 项目内绑定到DataGrid 的大型记录集时遇到了高度问题。 Accordion 本身的高度可以很好地缩放,但手风琴控件内的 DataGrid 没有得到 ScrollBar 或以任何方式受到限制,因此记录被隐藏。

我知道我很可能遗漏了一些非常简单的东西(比如从DataGrid 的高度属性到手风琴的绑定,但看起来很乱)

这是代码的精简版本(是的,如果您绑定在大记录集中,这会出现同样的问题)

<UserControl>
<layouttoolkit:Accordion x:Name="ReportSelector" HorizontalAlignment="Stretch">
    <layouttoolkit:AccordionItem Header="grid 1">
        <dg:DataGrid
         AutoGenerateColumns="False"
         CanUserAddRows="False"
         CanUserDeleteRows="False"
         SelectionMode="Single">
...
            </dg:DataGrid.Columns>
        </dg:DataGrid>

    </layouttoolkit:AccordionItem>
    <layouttoolkit:AccordionItem Header="grid 2">
        <dg:DataGrid
         AutoGenerateColumns="False"
         CanUserAddRows="False"
         CanUserDeleteRows="False"
         SelectionMode="Single">
...
            </dg:DataGrid.Columns>
        </dg:DataGrid>

    </layouttoolkit:AccordionItem>
    <layouttoolkit:AccordionItem Header="grid 3">
        <dg:DataGrid
         AutoGenerateColumns="False"
         CanUserAddRows="False"
         CanUserDeleteRows="False"
         SelectionMode="Single">
...
            </dg:DataGrid.Columns>
        </dg:DataGrid>

    </layouttoolkit:AccordionItem>            
</layouttoolkit:Accordion>
</UserControl>

【问题讨论】:

【参考方案1】:

看起来我最初的想法是正确的 - 我能够解决这个问题的唯一方法是将 DataGridMaxHeight 绑定到 AccordionItem 的 ActualHeight

将以下属性添加到每个 DataGrid 就可以了

MaxHeight="Binding RelativeSource=RelativeSource FindAncestor, AncestorType=x:Type layouttoolkit:AccordionItem,Path=ActualHeight"

【讨论】:

【参考方案2】:

我很高兴我偶然发现了这个!需要对此 QA 进行投票。除了列宽之外,我遇到了类似的问题。

我的 DataGrid 有 Width="Auto",以及一些 * 大小的列宽。在 Accordion 之外,DataGrid 渲染得很好,但在 Accordion 内部,所有列的宽度都会被压缩到每个 10 像素。想不通为什么。可能是错误?

我注意到,如果我将静态宽度设置为 400 而不是 Auto,则列将正确呈现。然后我尝试像你一样将 DataGrid Width 绑定到 AccordionItem ActualWidth,现在它工作得很好。谢谢楼主!

【讨论】:

以上是关于手风琴高度问题中的WPF DataGrid的主要内容,如果未能解决你的问题,请参考以下文章

模态中的顺风高度过渡

如何在反应中改变手风琴的高度?

试图限制手风琴内动态生成的行列表以滚动显示在固定高度的卡片中

手风琴正在打破 div 的高度

WPF DEV实现手风琴效果

WPF 简易手风琴 (ListBox+Expander)