4 Stimmen

Lazy loading System.Windows.Control.Image nur wenn sichtbar

Ich brauche meine Anwendung, um ein Bild nur zu rendern, wenn es für den Benutzer sichtbar wird. Ich habe versucht, anhängen. Ich habe versucht, die folgenden (f#):

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

Aber das lädt nur, es ist nicht träge. Wie funktioniert IsVisible Arbeit, wird dies nur wahr sein, wenn die Benutzer das Bild-Element in Ansicht scrollt?

Ich habe auch versucht, die Bindungsquelle wie folgt zu ändern:

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

            CaptureToWpfImage();
            return imageElement.Source;
        }
    }

Wie kann ich BeginCapture() nur aufrufen lassen, wenn das Bild in die Ansicht gescrollt wird?

1voto

Fredrik Hedblad Punkte 81655

Klingt, als bräuchten Sie etwas, das Virtualisierung unterstützt. Dadurch werden nur die sichtbaren Elemente zur Ladezeit erstellt. Alle anderen Elemente werden träge erstellt, wenn sie sichtbar werden.

Beispiel mit VirtualizingStackPanel für eine 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>

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X