WPF - 使两个扩展器填充可用空间,具体取决于显示的空间

时间:2017-04-18 12:40:59

标签: wpf xaml mahapps.metro

所以,我有2个扩展器。 一个应位于控件的顶部,一个应位于控件的底部。

当我点击顶部展开器时,底部应折叠,顶部应向下展开并占用所有可用空间,而无需移除或推出页面底部。反之,当我单击底部扩展器时,顶部应该折叠,底部应该向上扩展并占用控件上的所有可用空间。

我遇到的问题是视觉问题,我知道如何在我的ViewModel中绑定扩展器的 IsExpanded 并相应地更新它们。我不知道要使用哪些控件以及如何正确设置它们。

我尝试过使用Grid,但如果我将行高设置为*,无论我做什么,它们的高度(当然)都会保持不变,并且内容只会扩展到行的允许高度。

<Grid>
    <Grid.RowDefinitions>
        <RowDefinition Height="*" />
        <RowDefinition Height="2*" />
    </Grid.RowDefinitions>

    <Expander
        Grid.Row="0"
        Margin="5"
        Header="Server Connections"
        IsExpanded="{Binding IsTopExpanded}">

    *** ListBox With Content ***
    </Expander>

    <Expander
        Grid.Row="1"
        Margin="5"
        Header="Server Browser"
        IsExpanded="{Binding IsBottomExpanded}">

    *** Some Content ***
    </Expander>
</Grid>

我尝试使用StackPanel,但顶级Expander内容没有收到垂直滚动条,因此如果我有很多项目 - 我无法向下滚动。

希望我很清楚,如果我不是 - 请告诉我。 :)

1 个答案:

答案 0 :(得分:1)

您需要为*的{​​{1}}设置AutoHeight之间的切换。您可以使用两个RowDefinition s执行此操作:

Style