diff --git a/Diffusion.Toolkit/Controls/ThumbnailView.xaml.Page.cs b/Diffusion.Toolkit/Controls/ThumbnailView.xaml.Page.cs index 193713f..30982a2 100644 --- a/Diffusion.Toolkit/Controls/ThumbnailView.xaml.Page.cs +++ b/Diffusion.Toolkit/Controls/ThumbnailView.xaml.Page.cs @@ -99,19 +99,24 @@ public void ClearSelection() public void ReloadThumbnailsView() { - var wrapPanel = GetChildOfType(this)!; + var wrapPanel = GetChildOfType(this); if (wrapPanel == null || wrapPanel.Children.Count == 0) - return; + return; // 🔐 Protects against out-of-range indexing here - var scrollViewer = GetChildOfType(this)!; + var scrollViewer = GetChildOfType(this); + if (scrollViewer == null) + return; var offset = scrollViewer.VerticalOffset; - var height = scrollViewer.ViewportHeight; var item = wrapPanel.Children[0] as ListViewItem; + // 🛡️ Additional verification + if (item == null) + return; + var preloadSize = item.ActualHeight * 2; double top = 0; @@ -121,7 +126,10 @@ public void ReloadThumbnailsView() for (var i = 0; i < wrapPanel.Children.Count; i++) { item = wrapPanel.Children[i] as ListViewItem; - + + if (item == null) + continue; // 🛡️ Additional verification + if (top + item.ActualHeight >= (offset - preloadSize) && top <= (offset + height + preloadSize)) { if (item?.DataContext is ImageEntry { LoadState: LoadState.Unloaded } imageEntry)