WPF容器/网格布局

时间:2012-06-22 16:38:33

标签: wpf layout grid containers

我需要创建一个WPF容器,它可以显示3种不同控件类型的集合。每个控件的高度和宽度都基于其他控件。例如,如果controlA为200X200,则controlB为100X200,controlC为50X50。我需要找出如何通过根据可用空间和每种控件类型的数量找到最佳布局来创建足够智能的容器来安排这些控件。

以下面的情况为例,我们有1个controlA实例,1个controlB实例和2个controlC实例。请注意这个优雅的位置,使其外观紧凑,而不是顺序控件列表。

container http://onlinegolfpool.com/images/grid.png

有关如何解决的任何想法?我应该使用网格并自己计算吗?

提前致谢

2 个答案:

答案 0 :(得分:1)

你绝对应该使用Grid,但不要想到自己计算这个:) 使用星号(*)定义每个单元格的相对大小。 WPF将为您完成剩下的工作。

示例:

<Grid>
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="2*"/>
        <ColumnDefinition Width="*"/>
        <ColumnDefinition Width="*"/>
    </Grid.ColumnDefinitions>
    <Grid.RowDefinitions>
        <RowDefinition Height="*"/>
        <RowDefinition Height="*"/>
    </Grid.RowDefinitions>

    <Rectangle Fill="Pink" Stroke="Black" Grid.RowSpan="2"/>
    <Rectangle Fill="Blue" Stroke="Black" Grid.Column="1" Grid.ColumnSpan="2"/>
    <Rectangle Fill="Yellow" Stroke="Black" Grid.Row="1" Grid.Column="1"/>
    <Rectangle Fill="Yellow" Stroke="Black" Grid.Row="1" Grid.Column="2"/>
</Grid>

Asterisk非常强大,许多人甚至不知道它:)享受!

答案 1 :(得分:0)

我的建议是使用stackpanel而不是gridpanel。然后将硬编码宽度提供给您想要的任何控件,其余区域将自行调整。

 <StackPanel Orientation=Horizontal>
<leftcontrol/>
<StackPanel Orientation=Vertical>
<firstcontrol/>
<StackPanel Orientation=Horizontal>
<bottomLeftControl/>
<bottomRightControl/>
</StackPanel> 
</StackPanel>
</StackPanel>