首页 > 解决方案 > 在看到堆栈面板之前不要加载图像源

问题描述

我的程序需要在一个可滚动视图(大约 1K)中加载大量图像
我的代码:

<ScrollViewer>
    <VirtualizingStackPanel Orientation="Vertical"> <!-- Stack panel of stack panels -->
        <StackPanel Orientation="Horizontal">
            <local:Widget Text="1" Image="https://exaple.com/" /> <!-- local class purpose of is placing image and text in one line -->
            <local:Widget Text="1" Image="https://exaple.com/" />
            <local:Widget Text="1" Image="https://exaple.com/" />
        </StackPanel>
        <StackPanel Orientation="Horizontal">
            <local:Widget Text="1" Image="https://exaple.com/" />
            <local:Widget Text="1" Image="https://exaple.com/" />
            <local:Widget Text="1" Image="https://exaple.com/" />
        </StackPanel>
        ...
    </VirtualizingStackPanel>
</ScrollViewer>

问题是在启动 wpf 之前会去每个网站并一次下载所有图像,我怎么能说 wpf 下载并在用户看到它们时显示它们?

- - 编辑

我已经确定了 scrollviewer 要求所有内容一次的问题,无论我是否使用CanContentScroll,我也尝试使用ListBoxwith VirtualizingPanel.ScrollUnit="Pixel",但它也没有用,仍在寻找答案

标签: c#wpf

解决方案


经过大约 7 个小时的纯粹地狱后,我做到了(我的意思是我确实找到了)
加载大量图像以显示在 WrapPanel
没有缓存和其他对我来说不那么重要的类我找到了一个 ScrollViewer 实现,它检查每个如果视图中有任何StackPanel's,则滚动已更改,并且DataTrigger它会更改为您想要的任何内容,并且尽管我喜欢这个答案,但我越讨厌事情的工作方式)希望我会帮助任何人


推荐阅读