我在一个dockPanel中有两个扩展器,当一个扩展器打开时,我需要填充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>在这里,我描述了扩展器的三种可能状态:
1)第一膨胀机是开启的,第二膨胀机是关闭的。如你所见,第一台膨胀机并没有占据所有可飞行的高度:

2)第二膨胀机是开启的,第一膨胀机是关闭的。这是我希望这两个扩展器都有正确的行为:

( 3)两个扩展器都是开放的。我要他们把一半半高:

我如何才能实现扩张器的正确行为?
发布于 2015-10-14 23:08:51
如果使用而不是DockPanel,则可以使用Grid纯Grid实现所需的功能。我不认为在这种情况下使用DockPanel的目的是什么。否则,您需要后面的代码(一些转换器)来调整扩展器的正确大小。
这里的想法是,我们需要一个有2行的网格,当包含的扩展程序被折叠时,行的高度应该是Auto,否则行的高度应该是*。当展开这两个扩展器时,这两个行的高度都为*,每个行将共享网格整个高度的一半:
<Grid Background="Black">
<Grid.Resources>
<Style TargetType="RowDefinition">
<Setter Property="Height" Value="Auto"/>
<Style.Triggers>
<DataTrigger Binding="{Binding Tag.IsExpanded, RelativeSource={RelativeSource Self}}"
Value="True">
<Setter Property="Height" Value="*"/>
</DataTrigger>
</Style.Triggers>
</Style>
</Grid.Resources>
<Grid.RowDefinitions>
<RowDefinition Tag="{Binding ElementName=articlesExpander}"/>
<RowDefinition Tag="{Binding ElementName=turneroExpander}"/>
</Grid.RowDefinitions>
<Expander Name="articlesExpander" Template="{StaticResource ExpanderHeaderImage}">
<Grid Name="articlesGridExpander" ShowGridLines="True" Background="#FFEC0000">
<TextBlock>Hello</TextBlock>
</Grid>
</Expander>
<Expander Name="turneroExpander" Template="{StaticResource ExpanderHeaderImage}" Grid.Row="1">
<Grid Name="turneroGridExpander" ShowGridLines="True" Height="{Binding ElementName=DummyExpanderHeight, Path=Height}" Background="#FF0AE400">
<TextBlock>Bye</TextBlock>
</Grid>
</Expander>
</Grid>https://stackoverflow.com/questions/33132257
复制相似问题