2

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

以下面的例子为例,我们有 1 个 controlA 实例、1 个 controlB 实例和 2 个 controlC 实例。请注意,与顺序控件列表相比,它是如何优雅地定位给它一个紧凑的外观。

容器 http://onlinegolfpool.com/images/grid.png

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

提前致谢

4

2 回答 2

2

您绝对应该使用 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 非常强大,很多人甚至都不知道它:) 享受吧!

于 2012-06-22T16:42:07.707 回答
0

我的建议是使用堆栈面板而不是网格面板。然后为您想要的任何控件提供硬编码宽度,该区域的其余部分将自行调整。

<StackPanel Orientation=Horizontal>
    <leftcontrol/>
    <StackPanel Orientation=Vertical>
        <firstcontrol/>
        <StackPanel Orientation=Horizontal>
            <bottomLeftControl/>
            <bottomRightControl/>
        </StackPanel> 
    </StackPanel>
</StackPanel>
于 2012-06-22T16:46:30.863 回答