我编写了一个显示一些图片的小应用程序。为此,我使用了一个 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
中最高元素的高度。
ArrangeOverride
方法中,你只需要为面板中的每个元素计算正确的 X、Y 坐标,以便将其放置在指定位置。在你的情况下,这些计算非常简单。自定义面板是解决许多 WPF 中 UI 相关问题的关键,因此我强烈建议你学习它 :) - Maxim