很抱歉用一个初学者问题打扰您。我正在尝试使用 C# 中的 WPF 实现图像网格(例如在漫画查看器或电影数据库中)。
现在我最初尝试使用 ListView 和 ListBox,但我没有让它工作以拥有简单样式的图像网格。然后我偶然发现了 ItemsControl 与 WrapPanel 的结合。这很容易就解决了。
然后我尝试实现一种打开单击图像的方法,但我陷入了困境。现在我在各种文章中发现 ItemsControl 不提供读取当前所选项目索引的操作。
现在我有点不知道如何继续下去。您是否有简单 ImageGrid 的示例代码或使用 ItemsControl 的想法?我唯一的想法是读取发送者对象的图像源,然后将其与图像列表进行比较。
这是我的 XAML 代码:
<ItemsControl Name="ImageHistory" Margin="100" HorizontalAlignment="Center" HorizontalContentAlignment="Center">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<WrapPanel/>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate>
<StackPanel Margin="15" MouseUp="OpenDirectory" MouseEnter="HighlightButton" MouseLeave="UnhighlightButton">
<Image Source="{Binding ImageData}" Height="150" Width="150" Margin="10"
RenderOptions.BitmapScalingMode="HighQuality" Stretch="UniformToFill"/>
</StackPanel>
</DataTemplate>
</ItemsControl.ItemTemplate>
提前非常感谢!
好吧,我做到了。当我提出正确的问题后,事情就变得非常简单了。删除滚动功能就达到了目的。这是工作代码:
<ListBox Name="FolderList" Margin="100" HorizontalAlignment="Center" HorizontalContentAlignment="Center" ScrollViewer.HorizontalScrollBarVisibility="Disabled">
<ListBox.ItemsPanel>
<ItemsPanelTemplate >
<WrapPanel/>
</ItemsPanelTemplate>
</ListBox.ItemsPanel>
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal" HorizontalAlignment="Center" Background="{DynamicResource ButtonDefault}" Margin="25"
MouseUp="LoadFolder" MouseEnter="ButtonLight_MouseEnter" MouseLeave="ButtonLight_MouseLeave">
<Image Source="{Binding ImageData}" Stretch="UniformToFill" RenderOptions.BitmapScalingMode="HighQuality"
Width="250" Height="250" Margin="25"/>
<DockPanel Margin="0,25,0,25">
<TextBlock Text="{Binding Caption}" Width="400" Margin="10" DockPanel.Dock="Top"
FontFamily="Perpetua Titling MT" FontSize="24" Foreground="{DynamicResource TextColorHeader}"/>
<TextBlock Text="{Binding FolderPath}" Width="400" Margin="10" TextWrapping="Wrap" DockPanel.Dock="Bottom"
FontFamily="Lato Light" FontSize="16" Foreground="{DynamicResource TextColorSubtext}" FontStyle="Italic"/>
<TextBlock Text="{Binding Subtext}" Width="400" Margin="10" TextWrapping="Wrap" DockPanel.Dock="Top"
FontFamily="Lato Light" FontSize="16" Foreground="{DynamicResource TextColorSubtext}"/>
</DockPanel>
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
无论如何,非常感谢:)