ItemsControl Wrapping

时间:2014-11-12 16:10:21

标签: xaml silverlight itemscontrol wrappanel

我有一个需要以下列方式显示的动态数据列表:

1  4  7  10
2  5  8  11
3  6  9  12

13 16 19 22
14 17 20 23
15 18 21 24
...

但是我的代码只迭代顶部并运行屏幕。以下代码位于网格内。我做错了什么?

          <toolkit:WrapPanel Orientation="Vertical" Grid.Row="2" >
                <ItemsControl ItemsSource="{Binding ImagingTypes, Mode=TwoWay}" 
                              Margin="5">
                    <ItemsControl.ItemsPanel>
                        <ItemsPanelTemplate>
                                <toolkit:WrapPanel Orientation="Vertical"/>
                        </ItemsPanelTemplate>
                    </ItemsControl.ItemsPanel>
                    <ItemsControl.ItemTemplate>
                        <DataTemplate>
                            <StackPanel Orientation="Horizontal" Margin="5,0,5,0">
                                <CheckBox IsChecked="{Binding IsSelected, Mode=TwoWay}" VerticalAlignment="Top" />
                                <TextBlock Grid.Column="1" Text="{Binding Description}" MaxWidth="150" TextWrapping="Wrap" />
                            </StackPanel>
                        </DataTemplate>
                    </ItemsControl.ItemTemplate>
                </ItemsControl>
            </toolkit:WrapPanel>

2 个答案:

答案 0 :(得分:0)

抱歉。我不太懂英语,所以我无法理解你的意思。但如果你想要一个如上所述的序列,如果你想保持项目的静态位置。你可以使用UniformGrid。我希望这就是你要找的东西。

这是代码:

我做了一个listview示例;

  <ListView x:Name="SharedSizeScopeListView">
        <ListView.ItemsPanel>
            <ItemsPanelTemplate >                   
                <UniformGrid IsItemsHost="True" Columns="4"/>
            </ItemsPanelTemplate>
        </ListView.ItemsPanel>
        <ListViewItem Content="1"/>
        <ListViewItem Content="4"/>
        <ListViewItem Content="7"/>
        <ListViewItem Content="10"/>

        <ListViewItem Content="2"/>
        <ListViewItem Content="5"/>
        <ListViewItem Content="8"/>
        <ListViewItem Content="11"/>

        <ListViewItem Content="3"/>                       
        <ListViewItem Content="6"/>                        
        <ListViewItem Content="9"/>                        
        <ListViewItem Content="12"/>

        <ListViewItem Content="13"/>
        <ListViewItem Content="16"/>
        <ListViewItem Content="19"/>
        <ListViewItem Content="22"/>

        <ListViewItem Content="14"/>
        <ListViewItem Content="17"/>
        <ListViewItem Content="20"/>
        <ListViewItem Content="23"/>

        <ListViewItem Content="15"/>                        
        <ListViewItem Content="18"/>                       
        <ListViewItem Content="21"/>                     
        <ListViewItem Content="24"/>

    </ListView>

答案 1 :(得分:0)

我不认为WrapPanel支持那种分层包装。嵌套方法不起作用 - 内部面板无法将其“剩余”项目“转发”到外部面板。

最简单的方法取决于您是想要固定数量的列,还是想要适合容器大小。如果是前者,则可以使用Grid并连续填充其单元格(使用代码隐藏或行为),即(0,0),(0,1),(0,2),(1) ,0),...,(0,4),(0,5),(0,6),(1,4),......

如果是后者 - 你想继续横向布置项目,直到用完房间 - 那么可能需要custom Panel。编写自己的面板有一点学习曲线(您必须阅读Silverlight布局系统),但它为您提供了很大的灵活性。