【发布时间】:2015-09-27 03:01:52
【问题描述】:
鉴于下面的 XAML,是否可以进行调整,以便在展开任一 Expander 项目时,TextBlock 内容垂直拉伸以填充剩余空间? (注意,这个 XAML 是故意简化的,解决方案必须满足这个简单的例子和任何数据绑定的ItemsSource 场景)。
StackPanel 本身会拉伸以填充空间(因为它包含在 Grid 中),所以我假设 StackPanel measuring code 内部存在冲突,不允许无限大的内容元素。我什至不确定这是否可以优雅地解决,它可能只需要手动覆盖测量代码并确定内容容器的最佳展开高度。
<Grid>
<StackPanel>
<Expander Header="Item 1">
<TextBlock Background="LightCoral" Text="Content 1 should be stretched vertically when expanded"/>
</Expander>
<Expander Header="Item 2">
<TextBlock Background="LightBlue" Text="Content 2 should be stretched vertically when expanded"/>
</Expander>
</StackPanel>
</Grid>
注意:我通读了How to get StackPanel's children to fill maximum space downward?,它与这个问题并没有真正的关系,因为该帖子的解决方案是使用DockPanel,这在数据绑定@987654331 中是不可能的@场景。
【问题讨论】:
-
我认为这实际上不是一个(微不足道的)可解决的问题。由于高度约束不是相互排斥的。基本上,如果任何扩展器要更改其 IsExpanded 状态,您将需要重新布局堆栈面板中的所有扩展器。
标签: wpf xaml stackpanel expander