仅在可见时延迟加载System.Windows.Control.Image

时间:2010-10-27 13:26:45

标签: c# wpf lazy-loading

我需要我的应用程序仅在用户可见时才渲染图像。我试着附上。我尝试了以下(f#):

   image.IsVisibleChanged.Add(fun e ->
        if image.IsVisible & mtvCapture.Capture <> null then
            mtvCapture.BeginCapture()
        )

但这只是加载,不会延迟加载。 IsVisible如何工作,只有当用户将图像元素滚动到视图中时才会这样?

还尝试修改绑定源,如下所示:

    public ImageSource ImageElementSource
    {
        get
        {
            if (Capture == null)
            {
                BeginCapture();
                return loadingImageSource;
            }

            CaptureToWpfImage();
            return imageElement.Source;
        }
    }

如果只在图像滚动到视图中时才能调用BeginCapture()?

1 个答案:

答案 0 :(得分:1)

听起来你需要一些支持虚拟化的东西。这仅在加载时创建可见元素。所有其他元素在可见时都会变得懒惰。

使用VirtualizingStackPanel作为ListBox的示例

<ListBox Name="c_imageListBox">
    <ListBox.ItemsPanel>
        <ItemsPanelTemplate>
            <VirtualizingStackPanel Orientation="Vertical"/>
        </ItemsPanelTemplate>
    </ListBox.ItemsPanel>
    <ListBox.ItemTemplate>
        <DataTemplate>
            <Image Source="{Binding ImagePath}"/>
        </DataTemplate>
    </ListBox.ItemTemplate>
</ListBox>