考虑将 2 个扩展器控件放置在另一个之下。如果一个扩展器控件折叠,则必须减小实际间隙(在扩展期间),并且另一个扩展器控件必须显示在第一个扩展器下方,没有间隙(在第一个和第二个扩展器之间)。如果第一个扩展器被扩展,那么第二个必须调整和显示。如何实现它?
问问题
8226 次
4 回答
14
<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>
将行高设置为“自动”时,行将自动调整其高度以适应内容。这意味着当您展开/折叠第一个扩展器时,第一行的高度会增加和缩小。
于 2012-09-25T08:21:34.870 回答
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);
}
}
于 2012-09-25T08:30:40.663 回答
1
使用StackPanel
withOrientation="Vertical"
作为包装器。这应该会有所帮助。
于 2012-09-25T07:44:51.620 回答
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>
于 2017-01-11T20:57:53.160 回答