在silverlight中将子项添加到WrapPanel的最佳方法是什么?我正在使用C#,我正在读取包含缩略图和相关信息的图像的JSON对象。
最终目标是有一个缩略图网格(水平13个拇指横跨950像素×6个拇指垂直)。
答案 0 :(得分:7)
当您面对在代码中添加项目时,通常会有更好的方法。
如何制作ListBox并将其ItemsSource设置为列表(或将其绑定到DataContext)。创建一个DataTemplate以显示缩略图+信息然后(这是重要的部分)使用WrapPanel制作ItemsPanelTemplate。
<Grid x:Name="ImageThumbnails">
<ListBox
ItemsSource="{Binding}"
Width="950"
ScrollViewer.HorizontalScrollBarVisibility="Disabled"
>
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Vertical">
<Image Source="{Binding Thumbnail}" Width="80" Height="60"/>
<TextBlock Text="{Binding ImageName}"/>
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
<ListBox.ItemsPanel>
<ItemsPanelTemplate>
<WrapPanel Orientation="Horizontal"/>
</ItemsPanelTemplate>
</ListBox.ItemsPanel>
</ListBox>
</Grid>
然后在您的代码中,一旦您从JSON调用中获取数据:
this.ImageThumbnails.DataContext = thumbnailListFromJSON;
现在,如果您的列表是ObservableCollection,那么对列表的任何更改都将自动反映在您的UI中。
(以上代码应视为伪代码 - 显然您将不得不更改它以反映您的数据结构)
编辑:将ScrollViewer.HorizontalScrollBarVisibility =“已禁用”添加到ListBox。这很重要,因为它会阻止滚动查看器在水平方向上无限扩展。如果没有这个,WrapPanel就会变成1行列表框。
答案 1 :(得分:0)
WrapPanel派生自Panel,因此您只需使用Children.Add(控件)。 WrapPanel将负责所有布局,这是它的工作。
答案 2 :(得分:0)
UniformGrid对于这种情况非常适合。不幸的是,它不是Silverlight框架的一部分。但是,有一些WPF版本的端口可供使用。