什么xaml代码来获得这种布局?

时间:2011-02-28 20:52:07

标签: silverlight layout

在我的页面的特定父控件中,我想要水平布局一些子控件(比如说矩形),以便每个控件具有相同的宽度并具有最大宽度。 这意味着,给定一个大的父控件:

  • 如果只有一个子控件,则它不会跨越整个父控件,但会将其宽度设置为最大宽度。
  • 添加子控件后,在某个点,这些最大宽度(每个子控件btw相同)的总和将大于父宽度。在这种情况下,总宽度应除以子节点数,每个孩子都会得到这个结果。

因为父控件必须绑定到一个集合,所以我开始写这个:

<ItemsControl Margin="10" Height="200" ItemsSource="{Binding MyCollection}">
    <ItemsControl.ItemsPanel>
        <ItemsPanelTemplate>
            <StackPanel HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Orientation="Horizontal" />
        </ItemsPanelTemplate>
    </ItemsControl.ItemsPanel>
    <ItemsControl.ItemTemplate>
        <DataTemplate>
            <ChildShape />
        </DataTemplate>
    </ItemsControl.ItemTemplate>
</ItemsControl>

我很快意识到StackPanel不是我想要的。

最终目标是在添加或删除儿童时拥有漂亮的动画(其他儿童必须滑动并平滑地改变其大小。

由于我是Silverlight的新手,我无法看到我应该使用哪个面板(自定义与否?)或如何实现我所描述的内容。

3 个答案:

答案 0 :(得分:1)

您可以尝试

 <UniformGrid Rows="1"> </UniformGrid>

替换StackPanel。如果SilverLight拥有它,我正在谈论WPF。

答案 1 :(得分:1)

+1为UniformGrid的想法。

对于添加或删除项目的动画,请查看此帖子/ MIX演示文稿。

http://blogs.msdn.com/b/expression/archive/2010/03/16/dynamic-layout-and-transitions-in-expression-blend-4.aspx

答案 2 :(得分:0)

听起来你可以使用Wrap Panel。 Jesse Liberty有一篇很好的博客文章,解释了如何使用它。