WPF - 使用 ItemsControl 创建 ImageGrid?

问题描述 投票:0回答:1

很抱歉用一个初学者问题打扰您。我正在尝试使用 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>

提前非常感谢!

c# wpf image grid itemscontrol
1个回答
0
投票

好吧,我做到了。当我提出正确的问题后,事情就变得非常简单了。删除滚动功能就达到了目的。这是工作代码:

<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>

无论如何,非常感谢:)

© www.soinside.com 2019 - 2024. All rights reserved.