使用2个或更多扩展器WPF填充父级的剩余空间

时间:2015-10-14 17:50:59

标签: c# wpf expander dockpanel

我在dockPanel内有2个扩展器,我需要填充扩展器打开时de dockPanel内可用的所有高度,如果两个都打开,我需要每个扩展器占用可用高度的一半,这样他们就可以了填补所有空间。这是我的代码:

<DockPanel Background="Black">
                    <Expander Name="articlesExpander" Template="{StaticResource ExpanderHeaderImage}" DockPanel.Dock="Top">
                        <Grid Name="articlesGridExpander" ShowGridLines="True" Background="#FFEC0000">
                            <TextBlock>Hello</TextBlock>
                        </Grid>
                    </Expander>
                    <Expander Name="turneroExpander" Template="{StaticResource ExpanderHeaderImage}" DockPanel.Dock="Bottom">
                        <Grid Name="turneroGridExpander" ShowGridLines="True" Height="{Binding ElementName=DummyExpanderHeight, Path=Height}" Background="#FF0AE400">
                            <TextBlock>Bye</TextBlock>
                        </Grid>
                    </Expander>
                </DockPanel>

这里我描述了扩展器的3种可能状态:

1)第一个扩展器打开,第二个扩展器关闭。正如你所看到的那样,第一个扩展器没有采用所有可用的高度: enter image description here

2)第二个膨胀机打开,第一个膨胀机关闭。这是我希望与两个扩展器一起使用的正确行为: enter image description here

3)两个扩展器都是开放的。我需要他们采取半个半高: enter image description here

如何实现扩展器的正确行为?

1 个答案:

答案 0 :(得分:7)

如果使用Grid代替DockPanel,您可以使用 XAML实现您想要的效果。在这种情况下,我没有看到使用DockPanel的目的。否则你需要代码(一些转换器)来正确调整扩展器的大小。

这里的想法是我们需要一个有2行的网格,当包含的Expander折叠时,行的高度应为Auto,否则行的高度应为{{1 }}。扩展2个扩展器时,两个行的高度均为*,每个行将共享整个网格高度的一半:

*