2011-02-28 19 views
1

在我的页面的特定父控件中,我想水平布局一些子控件(比方说矩形),以便每个控件具有相同的宽度并且具有最大宽度。 这意味着,给定一个大的家长控制:用什么xaml代码来获得这种布局?

  • 如果只有一个孩子的控制,也不会跨越整个父,但将有它的宽度设置为最大宽度。
  • 在添加子控件之后,在某个点上,这些最大宽度的总和(对于每个子控件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,我什么也看不见面板(好的动画自定义或没有?)我应该使用或如何能达到什么我描述。

回答

1

你可以尝试与一个

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

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

+0

它没有内置到SL框架中,但在线快速搜索将找到某些SL的实现。 http://www.google.com/search?q=uniformgrid+silverlight – foson 2011-02-28 21:15:08

+0

@foson:thx,似乎来自Jeff Wilcox的人可能是一个很好的开始,可以编写和自定义一个面板,以我想要的方式放置我的项目。 – 2011-02-28 22:03:30

0

这听起来像你可以使用画布面板。Jesse Liberty有一篇好的博客文章,解释如何使用它。

+0

孩子们不应该收缩而是收缩。 – 2011-02-28 21:28:10

1

对于UniformGrid的想法+1。

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

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

+0

由于Grid没有ItemsSource,我将如何将我的集合绑定到这个结构? – 2011-02-28 21:27:35

+0

编辑消息之前,您提到了一个简单的网格,所以我尝试用网格替换上面的StackPanel。首先,当添加孩子时,他们都会进入第一个单元格。其次,我需要控制列的数量。它应该与孩子的数量相同。 – 2011-02-28 21:44:48

+0

关于动画的文章当然值得一读。谢谢。 – 2011-02-28 22:04:21