5

我正在使用这样的Grid-control:

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

    <Rectangle Grid.Row="0" Fill="Red"></Rectangle>
    <Rectangle Grid.Row="1" Fill="Green"></Rectangle>
    <Rectangle Grid.Row="2" Fill="Yellow"></Rectangle>
    <Rectangle Grid.Row="3" Fill="Gray"></Rectangle>
</Grid>

假设网格的高度为 50 像素。显然,行的高度将是 10、10、20 和 10 像素。

现在假设网格的高度是 29 像素。在这种情况下,高度将是 10、10、0 和9像素,这意味着最后一行被剪裁。

有没有办法分配行将被剪裁的顺序?例如,我希望网格开始剪裁第二行(带有绿色矩形的那一行)而不是最后一行,这样当网格高度为 29 像素时,行的高度将为 10, 9 , 0 和10 像素。

4

1 回答 1

3

[在此处下载工具包]

这就是DockPanel救援的地方(这是用 WPF 编写的,但应该在 SL 中与工具包类似地工作,只需添加正确的 xmlns):

<DockPanel>
    <Rectangle DockPanel.Dock="Top"
               Height="10"
               Fill="Red" />
    <Rectangle DockPanel.Dock="Bottom"
               Height="10"
               Fill="Gray" />
    <Rectangle DockPanel.Dock="Top"
               Height="10"
               Fill="Green" />
    <Rectangle Fill="Yellow" />
</DockPanel>

一些注意事项:

  1. 如果您需要多个星号行/列,这将仅适用于一个星号行/列 - 在某些情况下,另一个内部DockPanel可能会有所帮助,但并非总是如此。
  2. 我保留了这些矩形的视觉顺序,但是代码中的位置发生了变化——DockPanel将首先剪辑它的最后一个孩子,然后是倒数第二个,依此类推,直到第一个孩子。孩子的顺序非常重要,不是很直观,注意每个孩子的顺序和它的DockPanel.Dock设置。
  3. DockPanel确实是布局系统的无名英雄。:)

编辑以回答第一条评论:

您在评论中只提到了红色和绿色矩形,所以我猜黄色仍然占据所有可用高度(星形行),但我不确定灰色矩形。基于此,我发现了两个选项。

对于黄色 -> 红色 -> 绿色 -> 灰色的裁剪顺序:

<DockPanel>
    <Rectangle DockPanel.Dock="Bottom"
               Height="10"
               Fill="Gray" />
    <DockPanel DockPanel.Dock="Top">
        <Rectangle DockPanel.Dock="Bottom"
                   Height="10"
                   Fill="Green" />
        <Rectangle DockPanel.Dock="Top"
                   Height="10"
                   Fill="Red" />
    </DockPanel>
    <Rectangle Fill="Yellow" />
</DockPanel>

对于黄色 -> 灰色 -> 红色 -> 绿色的裁剪顺序:

<DockPanel>
    <DockPanel DockPanel.Dock="Top">
        <Rectangle DockPanel.Dock="Bottom"
                   Height="10"
                   Fill="Green" />
        <Rectangle DockPanel.Dock="Top"
                   Height="10"
                   Fill="Red" />
    </DockPanel>
    <Rectangle DockPanel.Dock="Bottom"
               Height="10"
               Fill="Gray" />
    <Rectangle Fill="Yellow" />
</DockPanel>

黄色 -> 红色 -> 灰色 -> 绿色的剪辑顺序,我现在没有答案。它更具挑战性,如果您需要,请告诉我。

于 2013-10-17T19:13:27.440 回答