Files
TheXamlGuy/App/WeddingBuilder/Views/MainWindow.axaml.cs
T
2022-11-01 15:26:08 +00:00

76 lines
2.4 KiB
C#

using Avalonia;
using Avalonia.Controls;
using Avalonia.Media;
using Avalonia.Media.Immutable;
using FluentAvalonia.Styling;
using FluentAvalonia.UI.Controls;
using FluentAvalonia.UI.Media;
using PropertyChanged;
using System;
using System.Runtime.InteropServices;
namespace Builder;
[DoNotNotify]
public partial class MainWindow : CoreWindow
{
public MainWindow()
{
InitializeComponent();
}
protected override void OnOpened(EventArgs args)
{
if (AvaloniaLocator.Current.GetService<FluentAvaloniaTheme>() is FluentAvaloniaTheme theme)
{
theme.RequestedThemeChanged += OnRequestedThemeChanged;
if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows))
{
if (IsWindows11 && theme.RequestedTheme != FluentAvaloniaTheme.HighContrastModeString)
{
TransparencyBackgroundFallback = Brushes.Transparent;
TransparencyLevelHint = WindowTransparencyLevel.Mica;
TryEnableMicaEffect(theme);
}
}
}
base.OnOpened(args);
}
private void OnRequestedThemeChanged(FluentAvaloniaTheme sender, RequestedThemeChangedEventArgs args)
{
if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows))
{
if (IsWindows11 && args.NewTheme != FluentAvaloniaTheme.HighContrastModeString)
{
TryEnableMicaEffect(sender);
}
else if (args.NewTheme == FluentAvaloniaTheme.HighContrastModeString)
{
SetValue(BackgroundProperty, AvaloniaProperty.UnsetValue);
}
}
}
private void TryEnableMicaEffect(FluentAvaloniaTheme theme)
{
if (theme.RequestedTheme == FluentAvaloniaTheme.DarkModeString)
{
Color2 color = this.TryFindResource("SolidBackgroundFillColorBase", out object? value) ? (Color2)(Color)value! : new Color2(32, 32, 32);
color = color.LightenPercent(-0.5f);
Background = new ImmutableSolidColorBrush(color, 0.78);
}
else if (theme.RequestedTheme == FluentAvaloniaTheme.LightModeString)
{
Color2 color = this.TryFindResource("SolidBackgroundFillColorBase", out object? value) ? (Color2)(Color)value! : new Color2(243, 243, 243);
color = color.LightenPercent(0.5f);
Background = new ImmutableSolidColorBrush(color, 0.9);
}
}
}