Silverlight WrapPanel儿童

时间:2009-01-26 17:12:47

标签: c# silverlight json wrappanel

在silverlight中将子项添加到WrapPanel的最佳方法是什么?我正在使用C#,我正在读取包含缩略图和相关信息的图像的JSON对象。

最终目标是有一个缩略图网格(水平13个拇指横跨950像素×6个拇指垂直)。

3 个答案:

答案 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.Horizo​​ntalScrollBarVisibility =“已禁用”添加到ListBox。这很重要,因为它会阻止滚动查看器在水平方向上无限扩展。如果没有这个,WrapPanel就会变成1行列表框。

答案 1 :(得分:0)

WrapPanel派生自Panel,因此您只需使用Children.Add(控件)。 WrapPanel将负责所有布局,这是它的工作。

答案 2 :(得分:0)

UniformGrid对于这种情况非常适合。不幸的是,它不是Silverlight框架的一部分。但是,有一些WPF版本的端口可供使用。

http://www.jeff.wilcox.name/2009/01/uniform-grid/