[英]How can you make a WPF Expander stretch vertically within a vertical StackPanel
給定下面的XAML,是否可以進行調整,以便在Expander
任何一個擴展時, TextBlock
內容都可以垂直拉伸以填充剩余空間? (請注意,此XAML是有意簡化的,解決方案必須滿足此簡單示例以及任何與數據綁定的ItemsSource
方案)。
StackPanel
本身會拉伸以填充空間(因為它包含在Grid
),因此我假設StackPanel
測量代碼中存在沖突,該沖突不允許無限大的內容元素。 我什至不確定這是否可以優雅地解決,它可能只需要手動覆蓋測量代碼並確定內容容器的最佳擴展高度即可。
<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>
注意 :我通讀了如何使StackPanel的子級向下填充最大空間? 並且與該問題並沒有真正的關系,因為該帖子的解決方案是使用DockPanel
,這在數據綁定的ItemsSource
場景中是不可能的。
即使將其放置在Grid控件中,StackPanel也會將“內容高度”設置為自動。 應使用“網格”代替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);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.