Ленивая загрузка System.Windows.Control.Image только когда виден - PullRequest
4 голосов
/ 27 октября 2010

Мне нужно, чтобы мое приложение отображало изображение только тогда, когда оно становится видимым для пользователя. Я пытался прикрепить. Я пробовал следующее (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 Ответ

1 голос
/ 27 октября 2010

Похоже, вам нужно что-то, что поддерживает виртуализацию.Это создает только видимые элементы во время загрузки.Все остальные элементы создаются ленивыми, когда они становятся видимыми.

Пример использования 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>
...