Silverlight WrapPanel Дети - PullRequest
       7

Silverlight WrapPanel Дети

0 голосов
/ 26 января 2009

Какой лучший способ добавить детей в WrapPanel в silverlight? Я использую C # и читаю объект JSON, содержащий изображения с миниатюрами и соответствующей информацией.

Конечная цель - создать сетку миниатюр (13 больших пальцев по горизонтали, 950 пикселей по 6 больших по вертикали).

Ответы [ 3 ]

7 голосов
/ 27 января 2009

Когда вы сталкиваетесь с добавлением элементов в код, обычно есть лучший способ.

Как насчет создания 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.HorizontScrollBarVisibility = "Отключено" в ListBox. Это важно, потому что останавливает бесконечно расширяющийся просмотрщик в горизонтальном направлении. Без этого WrapPanel становится списком из 1 строки.

0 голосов
/ 05 мая 2009

UniformGrid идеально подходит для этой ситуации. К сожалению, это не часть платформы Silverlight. Однако есть несколько портов версии WPF.

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

0 голосов
/ 26 января 2009

WrapPanel является производной от Panel, поэтому вы можете просто использовать Children.Add (control). WrapPanel позаботится обо всем макете, это его работа.

...