我写了一个显示一些图像的小应用程序。为此,我使用了UniformGrid
。我的xaml
- 代码:
<ScrollViewer>
<ItemsControl ItemsSource="{Binding Images}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<UniformGrid Name="unifomGrid" VirtualizingPanel.IsVirtualizing="True" VirtualizingPanel.VirtualizationMode="Recycling" VirtualizingPanel.IsVirtualizingWhenGrouping="True" IsItemsHost="True" Loaded="unifomGrid_Loaded" />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate>
<materialDesign:Card Padding="32px" Margin="8px">
<StackPanel>
<StackPanel>
<Image Source="{Binding Path, Mode=OneWay}" />
</StackPanel>
</StackPanel>
</materialDesign:Card>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</ScrollViewer>
结果如下:
我的问题是,UniformGrid
的行高不是动态的。有没有可能每排都有自己的行高?目前,每行的高度是UniformGrid
内最高元素的高度。
答案 0 :(得分:0)
这是您可能要看看的另一条路线。它使用网格代替,并使用GridHelpers类允许您执行所需的操作,因为每行的默认高度都设置为“自动”。
<ScrollViewer>
<ItemsControl ItemsSource="{Binding Images}">
<ItemsControl.Template>
<ControlTemplate>
<Grid
IsItemsHost="True"
Loaded="Grid_Loaded"
GridHelpers.RowCount="{Binding Path=Items.Count, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type ItemsControl}}}">
</Grid>
</ControlTemplate>
</ItemsControl.Template>
<ItemsControl.ItemTemplate>
<DataTemplate>
<materialDesign:Card Padding="32px" Margin="8px">
<StackPanel>
<StackPanel>
<Image Source="{Binding Path, Mode=OneWay}" />
</StackPanel>
</StackPanel>
</materialDesign:Card>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</ScrollViewer>