0

这是我拥有的代码,我想知道如何完全卷起堆栈、扩展器和其中的对象,以推动其下方的所有对象以占用上层堆栈和对象卷起后留下的空间。我当前的代码如下:

<Grid>
 <StackPanel Margin="8,8,0,0" VerticalAlignment="Top" Height="225">
  <Expander Header="Expander">
   <Grid Height="201">
    <ListBox HorizontalAlignment="Left" Margin="103,63,0,38" Width="100">
     <ListBoxItem Content="Brown"/>
     <ListBoxItem Content="Red"/>
     <ListBoxItem Content="Green"/>
     <ListBoxItem Content="Yellow"/>
    </ListBox>
   </Grid>
  </Expander>
 </StackPanel>
 <StackPanel Margin="0,0,0,8" VerticalAlignment="Bottom" Height="221">
  <Expander Header="Expander">
   <Grid Height="194">
    <ListBox Margin="177,21,213,73">
     <ListBoxItem Content="Gold"/>
     <ListBoxItem Content="Silver"/>
     <ListBoxItem Content="Platinum"/>
     <ListBoxItem Content="Palladium"/>
    </ListBox>
   </Grid>
  </Expander>
 </StackPanel>

</Grid>
4

1 回答 1

1

如果我正确理解了您想要做什么,您可以在网格中使用星号大小来执行此操作。星形大小告诉网格使用所有剩余的可用大小(如果多行/列是星形大小,则按比例分配)。因此:

<Grid>
  <Grid.RowDefinitions>
    <RowDefinition Height="Auto" />
    <RowDefinition Height="*" />
  </Grid.RowDefinitions>
  <StackPanel Margin="8,8,0,0" VerticalAlignment="Top" Height="225" Grid.Row="0">
    <!-- first Expander here -->
  </StackPanel>
  <StackPanel Margin="0,0,0,8" VerticalAlignment="Bottom" Grid.Row="1">
    <!-- second Expander here -->
  </StackPanel>
</Grid>

注意 Grid.Row 附加属性。

现在,当您将第一个 StackPanel 的可见性设置为 Collapsed 时,它不会占用任何高度。所以反过来 Grid 的第一行折叠到零高度。所以网格的整个高度都专用于第二行,这意味着网格的整个高度都交给了第二个 StackPanel 及其内容。

这就是你想要的结果吗?我可能误解了这个问题......如果是这样,请发表评论,我会更新或删除。

于 2010-03-11T03:01:46.343 回答