首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用2个或更多的扩展器WPF填充父级的剩余空间。

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

Stack Overflow用户
提问于 2015-10-14 17:50:59
回答 1查看 1.7K关注 0票数 4

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

代码语言:javascript
复制
<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)两个扩展器都是开放的。我要他们把一半半高:

​

我如何才能实现扩张器的正确行为?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-10-14 23:08:51

如果使用而不是DockPanel,则可以使用Grid纯Grid实现所需的功能。我不认为在这种情况下使用DockPanel的目的是什么。否则,您需要后面的代码(一些转换器)来调整扩展器的正确大小。

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

代码语言:javascript
复制
<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>
票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33132257

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档