diff --git a/src/settings-ui/Settings.UI/SettingsXAML/OOBE/Views/ScoobeReleaseNotesPage.xaml b/src/settings-ui/Settings.UI/SettingsXAML/OOBE/Views/ScoobeReleaseNotesPage.xaml
index b5e0abb4f691..9c361ea7d647 100644
--- a/src/settings-ui/Settings.UI/SettingsXAML/OOBE/Views/ScoobeReleaseNotesPage.xaml
+++ b/src/settings-ui/Settings.UI/SettingsXAML/OOBE/Views/ScoobeReleaseNotesPage.xaml
@@ -7,27 +7,6 @@
xmlns:tkcontrols="using:CommunityToolkit.WinUI.Controls"
Loaded="Page_Loaded"
mc:Ignorable="d">
-
-
-
-
-
@@ -51,7 +30,7 @@
Visibility="Visible" />
_currentReleases;
+ private string _currentMarkdown;
///
/// Initializes a new instance of the class.
@@ -26,6 +30,7 @@ public sealed partial class ScoobeReleaseNotesPage : Page
public ScoobeReleaseNotesPage()
{
this.InitializeComponent();
+ Unloaded += OnUnloaded;
}
///
@@ -128,6 +133,7 @@ private void DisplayReleaseNotes()
LoadingProgressRing.Visibility = Visibility.Collapsed;
var (releaseNotesMarkdown, heroImageUrl) = ProcessReleaseNotesMarkdown(_currentReleases);
+ _currentMarkdown = releaseNotesMarkdown;
// Set the Hero image if found
if (!string.IsNullOrEmpty(heroImageUrl))
@@ -140,7 +146,7 @@ private void DisplayReleaseNotes()
HeroImageHolder.Visibility = Visibility.Collapsed;
}
- ReleaseNotesMarkdown.Text = releaseNotesMarkdown;
+ ApplyThemeAndRenderMarkdown();
ReleaseNotesMarkdown.Visibility = Visibility.Visible;
}
catch (Exception ex)
@@ -151,9 +157,81 @@ private void DisplayReleaseNotes()
private void Page_Loaded(object sender, RoutedEventArgs e)
{
+ ActualThemeChanged += OnActualThemeChanged;
+ App.ThemeService.ThemeChanged += OnAppThemeChanged;
DisplayReleaseNotes();
}
+ private void OnActualThemeChanged(FrameworkElement sender, object args)
+ {
+ ApplyThemeAndRenderMarkdown();
+ }
+
+ private void OnAppThemeChanged(object sender, ElementTheme theme)
+ {
+ if (DispatcherQueue.HasThreadAccess)
+ {
+ ApplyThemeAndRenderMarkdown();
+ return;
+ }
+
+ _ = DispatcherQueue.TryEnqueue(ApplyThemeAndRenderMarkdown);
+ }
+
+ private void ApplyThemeAndRenderMarkdown()
+ {
+ var headingForeground = ReleaseNotesMarkdown.Foreground as Brush;
+ if (headingForeground == null)
+ {
+ return;
+ }
+
+ ReleaseNotesMarkdown.Config = BuildMarkdownConfig(headingForeground);
+
+ if (string.IsNullOrEmpty(_currentMarkdown))
+ {
+ return;
+ }
+
+ // Force markdown regeneration so headings pick up the updated theme config.
+ ReleaseNotesMarkdown.Text = string.Empty;
+ ReleaseNotesMarkdown.Text = _currentMarkdown;
+ }
+
+ private static MarkdownConfig BuildMarkdownConfig(Brush headingForeground)
+ {
+ return new MarkdownConfig
+ {
+ Themes = new MarkdownThemes
+ {
+ BoldFontWeight = FontWeights.SemiBold,
+ H1FontSize = 28,
+ H1FontWeight = FontWeights.SemiBold,
+ H1Margin = new Thickness(0, 36, 0, 8),
+ H1Foreground = headingForeground,
+ H2FontSize = 20,
+ H2FontWeight = FontWeights.SemiBold,
+ H2Margin = new Thickness(0, 16, 0, 4),
+ H2Foreground = headingForeground,
+ H3FontSize = 16,
+ H3FontWeight = FontWeights.SemiBold,
+ H3Margin = new Thickness(0, 16, 0, 4),
+ H3Foreground = headingForeground,
+ HorizontalRuleThickness = 1,
+ ImageStretch = Stretch.Uniform,
+ ListBulletSpacing = 1,
+ ListGutterWidth = 10,
+ },
+ };
+ }
+
+ private void OnUnloaded(object sender, RoutedEventArgs e)
+ {
+ ActualThemeChanged -= OnActualThemeChanged;
+ App.ThemeService.ThemeChanged -= OnAppThemeChanged;
+ Unloaded -= OnUnloaded;
+ }
+
protected override void OnNavigatedTo(NavigationEventArgs e)
{
if (e.Parameter is IList releases)