2010-06-10 5 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 равен нулю, все три прямоугольника сворачиваются в ничто. –

ответ

3

Или в UniformGrid:

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

Ага! Я забыл все об UniformGrid. Это идеально подходит для того, что я хочу. – moswald

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. Есть ли решение, которое не требует использования Grid? Я не хочу добавлять новое RowDefinition каждый раз, когда я решу увеличить количество Rectangles. – moswald

Смежные вопросы