diff --git a/src/Files.App/UserControls/FilePreviews/RichTextPreview.xaml b/src/Files.App/UserControls/FilePreviews/RichTextPreview.xaml index 0ac172bff475..dcb53031543c 100644 --- a/src/Files.App/UserControls/FilePreviews/RichTextPreview.xaml +++ b/src/Files.App/UserControls/FilePreviews/RichTextPreview.xaml @@ -8,6 +8,7 @@ xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" d:DesignHeight="300" d:DesignWidth="400" + Unloaded="RichTextPreview_Unloaded" mc:Ignorable="d"> diff --git a/src/Files.App/UserControls/FilePreviews/RichTextPreview.xaml.cs b/src/Files.App/UserControls/FilePreviews/RichTextPreview.xaml.cs index eb093ff74bd1..77383ec381f5 100644 --- a/src/Files.App/UserControls/FilePreviews/RichTextPreview.xaml.cs +++ b/src/Files.App/UserControls/FilePreviews/RichTextPreview.xaml.cs @@ -17,7 +17,20 @@ public RichTextPreview(RichTextPreviewViewModel viewModel) private void TextPreviewControl_Loaded(object sender, Microsoft.UI.Xaml.RoutedEventArgs e) { - TextPreviewControl.Document.LoadFromStream(Microsoft.UI.Text.TextSetOptions.FormatRtf, ViewModel.Stream); + // Defensive check to prevent loading if stream is null or disposed + if (ViewModel.Stream is not null) + { + TextPreviewControl.Document.LoadFromStream(Microsoft.UI.Text.TextSetOptions.FormatRtf, ViewModel.Stream); + } + } + + private void RichTextPreview_Unloaded(object sender, Microsoft.UI.Xaml.RoutedEventArgs e) + { + // Clear the document to release resources + TextPreviewControl.Document.SetText(Microsoft.UI.Text.TextSetOptions.None, string.Empty); + + // Call the ViewModel's unload handler to dispose the stream + ViewModel.PreviewControlBase_Unloaded(sender, e); } } } \ No newline at end of file diff --git a/src/Files.App/ViewModels/UserControls/Previews/RichTextPreviewViewModel.cs b/src/Files.App/ViewModels/UserControls/Previews/RichTextPreviewViewModel.cs index da16faf85385..3e9f1a84e28f 100644 --- a/src/Files.App/ViewModels/UserControls/Previews/RichTextPreviewViewModel.cs +++ b/src/Files.App/ViewModels/UserControls/Previews/RichTextPreviewViewModel.cs @@ -2,6 +2,7 @@ // Licensed under the MIT License. using Files.App.ViewModels.Properties; +using Microsoft.UI.Xaml; using Windows.Storage.Streams; namespace Files.App.ViewModels.Previews @@ -21,5 +22,13 @@ public async override Task> LoadPreviewAndDetailsAsync() return []; } + + public override void PreviewControlBase_Unloaded(object sender, RoutedEventArgs e) + { + Stream?.Dispose(); + Stream = null; + + base.PreviewControlBase_Unloaded(sender, e); + } } }