C# wpf中的屏幕事件

C# wpf中的屏幕事件,c#,.net,wpf,C#,.net,Wpf,我有一个小的自定义控件,用于下载和显示联系人图像。它通过将自身添加到等待下载的静态图像队列中,确保一次只下载一个图像 可以得到相当长的联系人列表。因此,我希望它只在屏幕上实际可见时才进入下载队列(有一个默认图像) 我已经尝试将逻辑放入Loaded事件中,覆盖OnRender和IsVisibleChanged事件,但似乎没有一个事件能满足我的需求 有什么建议吗 D.R 编辑: 这是一个WPF应用程序,很抱歉在此之前没有提及…如果您将某些系统控件(如ListView)的属性“VirtualMode”

我有一个小的自定义控件,用于下载和显示联系人图像。它通过将自身添加到等待下载的静态图像队列中,确保一次只下载一个图像

可以得到相当长的联系人列表。因此,我希望它只在屏幕上实际可见时才进入下载队列(有一个默认图像)

我已经尝试将逻辑放入
Loaded
事件中,覆盖
OnRender
IsVisibleChanged
事件,但似乎没有一个事件能满足我的需求

有什么建议吗

D.R

编辑:
这是一个WPF应用程序,很抱歉在此之前没有提及…

如果您将某些系统控件(如ListView)的属性“VirtualMode”设置为true并处理RetrieveVirtualItem事件,则该属性具有该属性。此事件调用当前可见的项目,您必须使用所需的数据(图像)填充这些项目。这样您就不需要一次填写所有项目。

您是否考虑过使用a来提供该功能

<DataTemplate DataType="{x:Type vm:MyViewModel}">
    <StackPanel Orientation="Horizontal">
        <Image>
            <Image.Source>
                <PriorityBinding FallbackValue="{StaticResource ImgDownloading}">
                    <Binding Path="ImageSource" IsAsync="True" />
                </PriorityBinding>
            </Image.Source>
        </Image>
        <Label Content="{Binding Name}" />
    </StackPanel>
</DataTemplate>


很抱歉,我应该更清楚地指定我正在使用的WPF标记。它不符合要求。WPF控件也支持虚拟模式。您在哪里显示此控件?如果它位于ListBox、ListView、ItemsControl等内部,则可以使用虚拟化items控件,并且在将项目滚动到视图中之前不会创建项目模板。如果它位于其他内容(如FlowDocument)中,则需要执行一些不同的操作。我将该功能封装在自定义控件中,这样我就可以更好地控制图像的下载方式,即如果我搜索“a”并返回500条联系人记录,当然,优先级绑定将尝试下载500个图像,而不仅仅是屏幕上当前可见的图像?您将让
ImageSource
属性访问阻止资源以下载图像。该资源将一次处理一个加载。