6

考虑将 2 个扩展器控件放置在另一个之下。如果一个扩展器控件折叠,则必须减小实际间隙(在扩展期间),并且另一个扩展器控件必须显示在第一个扩展器下方,没有间隙(在第一个和第二个扩展器之间)。如果第一个扩展器被扩展,那么第二个必须调整和显示。如何实现它?

4

4 回答 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

使用StackPanelwithOrientation="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 回答