考虑将2个Expander控件放在另一个下面。如果One Expander控制器被折叠,那么必须减小actaul间隙(在扩展期间)并且必须在下面向第一个扩展器显示另一个Expander控件而没有间隙(在第一和第二扩展器之间)。如果扩展第一个扩展器,则必须调整并显示第二个扩展器。如何实现它?
答案 0 :(得分:12)
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<Expander>
<TextBlock Text="expander 1 content" />
</Expander>
<Expander Grid.Row="1">
<TextBlock Text="expander 2 content" />
</Expander>
</Grid>
将行高设置为“自动”时,行将自动调整其高度以使内容适合。这意味着当您展开/折叠第一个扩展器时,第一行高度将增大和缩小。
答案 1 :(得分:2)
如果你只想要两个扩展器,当一个扩展器扩展另一个扩展器时,那么只需将它们的IsExpanded属性绑定在一起,这样就可以将另一个扩展器绑定到另一个
<Window x:Class="WpfApplication4.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:WpfApplication4="clr-namespace:WpfApplication4"
Title="MainWindow" Height="350" Width="525">
<Window.Resources>
<WpfApplication4:NotConverter x:Key="notConverter"/>
</Window.Resources>
<StackPanel Margin="12">
<Expander Header="First" IsExpanded="{Binding IsExpanded, ElementName=expander2, Converter={StaticResource notConverter}}">
<TextBlock Text="Hello"/>
</Expander>
<Expander Header="Second" Name="expander2">
<TextBlock Text="World!"/>
</Expander>
</StackPanel>
</Window>
NotConverter.cs
public class NotConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
return !((bool)value);
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
return !((bool)value);
}
}
答案 2 :(得分:1)
将StackPanel
与Orientation="Vertical"
一起用作包装器。这应该有所帮助。
答案 3 :(得分:0)
您可以执行Eirik所说的操作,或者,您可以将扩展器放在堆叠面板上并指定扩展器网格的高度。这是一个2视频系列,它将帮助您更好地使用WPF中的扩展器。 https://www.youtube.com/watch?v=ajKPYZ1KZc4&list=PLWTyZJ_llht1-OGaFaG-6D-0vjW_V0rpg
<StackPanel Height="768" Width="500" HorizontalAlignment="Left">
<Expander Header="Expande me" Background="Chocolate" FontSize="25">
<Grid Height="200" Background="AntiqueWhite" Width="500">
<Label Content="yay" Background="Aqua" Height="40" Width="90"/>
</Grid>
</Expander>
<Expander Header="Me too" Background="MediumAquamarine" FontSize="20">
<Grid Height="200" Width="500" Background="Coral">
<Label Content="Yay!!" Height="40" Width="100" Background="Khaki"/>
</Grid>
</Expander>
</StackPanel>