2010-06-10 108 views
2

我想用矩形填充面板,当面板调整大小时,矩形也应调整大小。用矩形填充面板

为什么以下不工作?

<Page 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> 
    <StackPanel HorizontalAlignment="Stretch" VerticalAlignment="Stretch"> 
    <Rectangle Fill="Red" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" /> 
    <Rectangle Fill="Green" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" /> 
    <Rectangle Fill="Blue" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" /> 
    </StackPanel> 
</Page> 

我宁愿不使用Grid因为添加/删除列和重新安排孩子的痛苦。 (我期待着StackPanel因为如果我想在开始添加一个黄色Rectangle,我只是声明了。我不必再为了别人的手。)

+0

注意StackPanel中不起作用的原因是StackPanel中从来没有给比自己DesiredSize其子女多在堆叠方向。由于Rectangle的DesiredSize为零,所有三个矩形都折叠为空。 – 2010-06-12 01:32:48

回答

3

还是一个UniformGrid:

<UniformGrid Columns="1"> 
    <Rectangle Fill="Red"/> 
    <Rectangle Fill="Green"/> 
    <Rectangle Fill="Blue"/> 
</UniformGrid> 
+0

啊哈!我忘记了UniformGrid的全部内容。这完全符合我想要的。 – moswald 2010-06-10 18:33:33

1

您使用的是StackPanel他们的行为是考虑到孩子的规模。使用Grid这需要整个可用大小:

<Grid> 
    <Grid.RowDefinitions> 
    <RowDefinition Height="*" /> 
    <RowDefinition Height="*" /> 
    <RowDefinition Height="*" /> 
    </Grid.RowDefinitions> 
    <Rectangle Fill="Red" Grid.Row="0" /> 
    <Rectangle Fill="Green" Grid.Row="1" /> 
    <Rectangle Fill="Blue" Grid.Row="2" /> 
</Grid> 
+0

Bleh。有任何解决方案不需要使用网格?我不想在每次决定增加矩形数时增加一个新的RowDefinition。 – moswald 2010-06-10 18:28:22