using WPFluent.Controls;
using WPFluent.Interop;
namespace WPFluent.Appearance;
///
/// 便于管理窗口背景。
///
///
/// /// WindowBackgroundManager.UpdateBackground( /// observedWindow.RootVisual, ///
/// currentApplicationTheme, /// observedWindow.Backdrop /// ); ///
///
public static class WindowBackgroundManager
{
///
/// Forces change to application background. Required if custom background effect was previously applied.
///
public static void UpdateBackground(Window? window, ApplicationTheme applicationTheme, WindowBackdropType backdrop)
{
if (window is null)
{
return;
}
//_ = WindowBackdrop.RemoveBackdrop(window);
if (applicationTheme == ApplicationTheme.Unknown)
{
backdrop = WindowBackdropType.None;
}
// This was required to update the background when moving from a HC theme to light/dark theme. However, this breaks theme proper light/dark theme changing on Windows 10.
// But window backdrop effects are not applied when it has an opaque (or any) background on W11 (so removing this breaks backdrop effects when switching themes), however, for legacy MICA it may not be required
// using existing variable, though the OS build which (officially) supports setting DWM_SYSTEMBACKDROP_TYPE attribute is build 22621
// source: https://learn.microsoft.com/en-us/windows/win32/api/dwmapi/ne-dwmapi-dwm_systembackdrop_type
if (Win32.Utilities.IsOSWindows11Insider1OrNewer && backdrop is not WindowBackdropType.None)
{
_ = WindowBackdrop.RemoveBackground(window);
}
//_ = WindowBackdrop.ApplyBackdrop(window, backdrop);
if (applicationTheme is ApplicationTheme.Dark)
{
//ApplyDarkThemeToWindow(window);
}
else
{
//RemoveDarkThemeFromWindow(window);
}
//_ = WindowBackdrop.RemoveTitlebarBackground(window);
foreach (object? subWindow in window.OwnedWindows)
{
if (subWindow is Window windowSubWindow)
{
//_ = WindowBackdrop.ApplyBackdrop(windowSubWindow, backdrop);
if (applicationTheme is ApplicationTheme.Dark)
{
//ApplyDarkThemeToWindow(windowSubWindow);
}
else
{
//RemoveDarkThemeFromWindow(windowSubWindow);
}
//_ = WindowBackdrop.RemoveTitlebarBackground(window);
}
}
}
}