优化更新代码,添加界面功能并整合

This commit is contained in:
GG Z
2025-02-10 20:53:40 +08:00
parent 83b846f15f
commit 978e03a67f
1389 changed files with 95739 additions and 22200 deletions

View File

@@ -0,0 +1,82 @@
using Microsoft.Win32;
using WPFluent.Interop;
namespace WPFluent.Appearance;
public static class SystemMenuThemeManager
{
public static void Apply(SystemMenuTheme theme = SystemMenuTheme.Auto)
{
// Enable dark mode for context menus if using dark theme
if (Environment.OSVersion.Version.Build >= 18362) // Windows 10 1903
{
if (theme == SystemMenuTheme.Auto)
{
// UxTheme methods will apply all of menus.
// However, the Windows style system prefers that
// Windows System Menu is based on `Apps Theme`,
// and Tray Context Menu is based on `System Theme` when using a custom theme.
// But actually we can't have our cake and eat it too.
// Finally, we synchronize the theme styles of tray with higher usage rates.
if (ApplicationThemeManager.GetSystemTheme() == SystemTheme.Dark)
{
_ = UxTheme.SetPreferredAppMode(UxTheme.PreferredAppMode.ForceDark);
UxTheme.FlushMenuThemes();
}
// Synchronize the theme with system settings
SystemEvents.UserPreferenceChanged -= OnUserPreferenceChangedEventHandler;
SystemEvents.UserPreferenceChanged += OnUserPreferenceChangedEventHandler;
}
else if (theme == SystemMenuTheme.Dark)
{
SystemEvents.UserPreferenceChanged -= OnUserPreferenceChangedEventHandler;
_ = UxTheme.SetPreferredAppMode(UxTheme.PreferredAppMode.ForceDark);
UxTheme.FlushMenuThemes();
}
else if (theme == SystemMenuTheme.Light)
{
SystemEvents.UserPreferenceChanged -= OnUserPreferenceChangedEventHandler;
_ = UxTheme.SetPreferredAppMode(UxTheme.PreferredAppMode.ForceLight);
UxTheme.FlushMenuThemes();
}
}
}
private static void OnUserPreferenceChangedEventHandler(object sender, UserPreferenceChangedEventArgs e)
{
if (ApplicationThemeManager.GetSystemTheme() == SystemTheme.Dark)
{
_ = UxTheme.SetPreferredAppMode(UxTheme.PreferredAppMode.ForceDark);
UxTheme.FlushMenuThemes();
}
else
{
_ = UxTheme.SetPreferredAppMode(UxTheme.PreferredAppMode.ForceLight);
UxTheme.FlushMenuThemes();
}
}
}
/// <summary>
/// Theme in which an system menu is displayed.
/// </summary>
public enum SystemMenuTheme
{
/// <summary>
/// Auto system theme.
/// </summary>
Auto = ApplicationTheme.Unknown,
/// <summary>
/// Dark system theme.
/// </summary>
Dark = ApplicationTheme.Dark,
/// <summary>
/// Light system theme.
/// </summary>
Light = ApplicationTheme.Light,
}