2017-04-04 50 views
-1

我有WrapPanel带图标。 我想逐行创建它(每行5个项目)。如何逐行制作WrapPanel项目?

所以,我的代码:

<WrapPanel Grid.Row="3" 
     Grid.RowSpan="2" 
     Grid.Column="4" 
     x:Name="wpIcons"> 
</WrapPanel> 


foreach(var ic in obj.Icons) 
{ 
    BitmapImage bi = new BitmapImage(); 
    bi.BeginInit(); 
    bi.StreamSource = new MemoryStream(ic.image); 
    bi.EndInit(); 

    Image im = new Image(); 
    im.Source = bi; 
    wpIcons.Children.Add(im); 
} 

所以,通过线工作,但也不行。

如何逐行制作图标?

+0

为什么不使用一个StackPanel呢?你应该看看MVVM模式。在后面的代码中添加项目是远远不够的。 –

+0

你是什么意思逐行?它是垂直还是水平? – Parag

+1

“每行5个项目”的要求范围可以从简单(限制WrapPanel的宽度,垂直堆栈面板与水平堆栈面板作为项目或纯粹的“UniformGrid”)到[hard](http://stackoverflow.com/a/9770590/1997232)(创建自己的面板)取决于你想要达到的目标。在给定的代码中,你可以尝试限制'im.Width',这样只有'5'图像适合,然后'6th'将被打包,但是如果窗口被调整大小等等,会发生什么? – Sinatr

回答

0

要控制单件上有多少物品,建议您使用UniformGrid。 下面是一个例子:

<UniformGrid Columns="2" Rows="2" Name="uniformGrid1" > 
      <Image Source="pic1.jpg"></Image> 
      <Image Source="pic2.jpg"></Image> 
      <Image Source="pic3.jpg"></Image> 
      <Image Source="pic4.jpg"></Image> 
    </UniformGrid> 

在给出的示例照片将在2行,2列显示(在你的情况,你可以设置行=“5”而不设置列)。您可以根据需要修改列和/或行。

1

如果你想5个项目,每行,你可以指定Image元素的固定宽度和WrapPanel

<WrapPanel x:Name="wpIcons" Grid.Row="3" 
      Grid.RowSpan="2" 
      Grid.Column="4" 
      Width="100"> 
</WrapPanel> 

foreach (var ic in obj.Icons) 
{ 
    BitmapImage bi = new BitmapImage(); 
    bi.BeginInit(); 
    bi.StreamSource = new MemoryStream(ic.image); 
    bi.EndInit(); 

    Image im = new Image(); 
    im.Width = 20; //<-- = 100/5 
    im.Source = bi; 
    wpIcons.Children.Add(im); 
}