0

Silverlight で WrapPanel に子を追加する最良の方法は何ですか? 私は C# を使用しており、サムネイルと関連情報を含む画像を含む JSON オブジェクトを読み込んでいます。

最終的な目標は、サムネイルのグリッド (水平方向に 950px に横方向に 13 個の親指、垂直方向に 6 個の親指) を作成することです。

4

3 に答える 3

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="Disabled" を ListBox に追加しました。スクロールビューアが水平方向に無限に拡大するのを止めるため、これは重要です。この WrapPanel がないと、1 行のリストボックスになります。

于 2009-01-27T02:54:41.797 に答える
0

このような状況には、UniformGrid が最適です。残念ながら、これは Silverlight フレームワークの一部ではありません。ただし、利用可能な WPF バージョンのいくつかのポートがあります。

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

于 2009-05-05T02:42:15.010 に答える
0

WrapPanel は Panel から派生しているため、Children.Add(control) を使用するだけです。WrapPanel はすべてのレイアウトを処理します。それがその仕事です。

于 2009-01-26T18:08:06.477 に答える