Created
March 27, 2025 11:09
-
-
Save CodingOctocat/6dbefdc455cc3e8419b5251a3527f8a8 to your computer and use it in GitHub Desktop.
WPF/DeferredContent
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
using System; | |
using System.Windows; | |
using System.Windows.Controls; | |
/// <summary> | |
/// <see href="https://stackoverflow.com/a/26543731/4380178">Deferred loading of XAML</see> | |
/// </summary> | |
public class DeferredContent : ContentPresenter | |
{ | |
public static readonly DependencyProperty DeferredContentTemplateProperty = | |
DependencyProperty.Register("DeferredContentTemplate", | |
typeof(DataTemplate), typeof(DeferredContent), null); | |
public DataTemplate DeferredContentTemplate | |
{ | |
get => (DataTemplate)GetValue(DeferredContentTemplateProperty); | |
set => SetValue(DeferredContentTemplateProperty, value); | |
} | |
public event EventHandler<RoutedEventArgs>? DeferredContentLoaded; | |
public DeferredContent() | |
{ | |
Loaded += HandleLoaded; | |
} | |
public void ShowDeferredContent() | |
{ | |
if (DeferredContentTemplate is not null) | |
{ | |
Content = DeferredContentTemplate.LoadContent(); | |
RaiseDeferredContentLoaded(); | |
} | |
} | |
private void HandleLoaded(object sender, RoutedEventArgs e) | |
{ | |
Loaded -= HandleLoaded; | |
Dispatcher.BeginInvoke(ShowDeferredContent); | |
} | |
private void RaiseDeferredContentLoaded() | |
{ | |
DeferredContentLoaded?.Invoke(this, new RoutedEventArgs()); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment