鉴于下面的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
这是不可能的数据绑定ItemsSource
方案。
答案 0 :(得分:0)
StackPanel将内容高度设置为自动,即使它被放置在网格控件中也是如此。 &#39;网格&#39;应该用来代替StackPanel,然后从后面的代码设置行高。 这是一个例子;
<Grid>
<Grid.RowDefinitions>
<RowDefinition x:Name="row1" Height="auto"/>
<RowDefinition x:Name="row2" Height="auto"/>
</Grid.RowDefinitions>
<Expander Header="Item 1" Expanded="Expander_Expanded_1" VerticalAlignment="Stretch" >
<TextBlock Background="LightCoral" Text="Content 1 should be stretched vertically when expanded" VerticalAlignment="Stretch"/>
</Expander>
<Expander Header="Item 2" Grid.Row="1" Expanded="Expander_Expanded_2" VerticalAlignment="Stretch" >
<TextBlock Background="LightBlue" Text="Content 2 should be stretched vertically when expanded" VerticalAlignment="Stretch"/>
</Expander>
</Grid>
在后面的代码中,您可以在展开的事件
上设置行的高度private void Expander_Expanded_1(object sender, RoutedEventArgs e)
{
ex2.Height = new GridLength(1, GridUnitType.Auto);
ex1.Height = new GridLength(1, GridUnitType.Star);
}