定义剪切Silverlight网格控件的行的顺序

时间:2013-07-12 09:26:55

标签: silverlight xaml grid-layout

我正在使用Grid - 这样的控件:

<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像素。

1 个答案:

答案 0 :(得分:3)

[下载工具包here]

这是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确实是版面系统的无名英雄。 :)
  4. 编辑以回答第一条评论:

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

    对于黄色的剪辑顺序 - &gt;红色 - &gt;绿色 - &gt;灰色:

    <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>
    

    对于黄色的剪辑顺序 - &gt;灰色 - &gt;红色 - &gt;绿色:

    <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>
    

    黄色的剪切顺序 - &gt;红色 - &gt;灰色 - &gt;格林,我现在没有答案。这更具挑战性,告诉我你是否需要它。