如何选择不同高度的WrapPanel项目(垂直)?

时间:2014-06-11 08:52:31

标签: c# wpf xaml custom-controls tiles

这就是现在的样子:

Tiles, not apposed

这就是我想要的方式:

Tiles, apposed

如图所示,瓷砖应尽可能密集,并且它们之间只有一个固定的边距。

这是我的代码:

<Grid Background="Gray">
    <TextBox x:Name="BoardNameTextBox" HorizontalAlignment="Left" Height="23" Margin="40,3,0,0" TextWrapping="Wrap" Text="pol" VerticalAlignment="Top" Width="120"/>
    <Button Content="Button" HorizontalAlignment="Left" Margin="491,3,0,0" VerticalAlignment="Top" Width="75" Click="Button_Click"/>
    <Grid Margin="0,30,0,0" Background="WhiteSmoke">

        <WrapPanel VerticalAlignment="Top" HorizontalAlignment="Left">
            <WrapPanel.Resources>
                <Style TargetType="{x:Type Rectangle}">
                    <Setter Property="Width" Value="80" />
                    <Setter Property="Height" Value="80" />
                    <Setter Property="Margin" Value="3" />
                    <Setter Property="Fill" Value="#4DB4DD" />
                </Style>
            </WrapPanel.Resources>

            <Rectangle Width="150" />
            <Rectangle />
            <Rectangle />
            <Rectangle />
            <Rectangle Width="200"/>
            <Rectangle Height="25"/>
            <Rectangle Height="40"/>
            <Rectangle />
            <Rectangle Width="220"/>
            <Rectangle Height="30"/>
            <Rectangle Height="30"/>
            <Rectangle Width="150" />
            <Rectangle />
        </WrapPanel>

    </Grid>

</Grid>

代码当然是我特定问题的示例代码 - 稍后它应该只是一个包装面板(或任何其他控件),以编程方式添加项目(这是自定义控件)(如“WrapPanel1.Children.Add”) (R);“)。我希望这些图片不言自明。

1 个答案:

答案 0 :(得分:4)

你正在寻找的是级联布局。它在javascript中有一个非常流行的实现,名为Masonry,它有一个WPF对应的 WPF-Masonry .check前面的链接详细说明演示。