Когда вы сталкиваетесь с добавлением элементов в код, обычно есть способ получше.
Как насчет создания ListBox и установки его ItemsSource в свой список (или привязки его к DataContext). Создайте DataTemplate для отображения миниатюры + информации, а затем (это важная часть) создайте ItemsPanelTemplate с помощью WrapPanel.
<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, любые изменения в списке будут автоматически отражаться в вашем пользовательском интерфейсе.
(Приведенный выше код следует рассматривать как псевдокод - очевидно, вам придется изменить его, чтобы отразить вашу структуру данных)
Изменить: добавлен ScrollViewer.HorizontalScrollBarVisibility = "Disabled" в ListBox. Это важно, потому что это останавливает бесконечно расширяющееся окно scrollviewer в горизонтальном направлении. Без этого WrapPanel становится списком с одной строкой.
person
geofftnz
schedule
27.01.2009