You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
92 lines
2.7 KiB
92 lines
2.7 KiB
using System; |
|
using Avalonia; |
|
using Avalonia.Controls; |
|
using Avalonia.Interactivity; |
|
using Avalonia.Media; |
|
using Avalonia.Media.Immutable; |
|
using Avalonia.Styling; |
|
using FluentAvalonia.Styling; |
|
using FluentAvalonia.UI.Media; |
|
using FluentAvalonia.UI.Windowing; |
|
using StabilityMatrix.Avalonia.Controls; |
|
using StabilityMatrix.Avalonia.Services; |
|
|
|
namespace StabilityMatrix.Avalonia.Views; |
|
|
|
public partial class MainWindow : AppWindowBase |
|
{ |
|
public INotificationService? NotificationService { get; set; } |
|
|
|
public MainWindow() |
|
{ |
|
InitializeComponent(); |
|
|
|
#if DEBUG |
|
this.AttachDevTools(); |
|
#endif |
|
|
|
TitleBar.ExtendsContentIntoTitleBar = true; |
|
TitleBar.TitleBarHitTestType = TitleBarHitTestType.Complex; |
|
} |
|
|
|
protected override void OnOpened(EventArgs e) |
|
{ |
|
base.OnOpened(e); |
|
|
|
Application.Current!.ActualThemeVariantChanged += OnActualThemeVariantChanged; |
|
|
|
var theme = ActualThemeVariant; |
|
if (IsWindows11 && theme != FluentAvaloniaTheme.HighContrastTheme) |
|
{ |
|
TryEnableMicaEffect(); |
|
} |
|
} |
|
|
|
public override void OnLoaded(object? sender, RoutedEventArgs e) |
|
{ |
|
base.OnLoaded(sender, e); |
|
NotificationService?.Initialize(this); |
|
} |
|
|
|
private void OnActualThemeVariantChanged(object? sender, EventArgs e) |
|
{ |
|
if (IsWindows11) |
|
{ |
|
if (ActualThemeVariant != FluentAvaloniaTheme.HighContrastTheme) |
|
{ |
|
TryEnableMicaEffect(); |
|
} |
|
else |
|
{ |
|
ClearValue(BackgroundProperty); |
|
ClearValue(TransparencyBackgroundFallbackProperty); |
|
} |
|
} |
|
} |
|
|
|
private void TryEnableMicaEffect() |
|
{ |
|
TransparencyBackgroundFallback = Brushes.Transparent; |
|
TransparencyLevelHint = new[] { WindowTransparencyLevel.Mica, WindowTransparencyLevel.Blur }; |
|
|
|
if (ActualThemeVariant == ThemeVariant.Dark) |
|
{ |
|
var color = this.TryFindResource("SolidBackgroundFillColorBase", |
|
ThemeVariant.Dark, out var value) ? (Color2)(Color)value! : new Color2(32, 32, 32); |
|
|
|
color = color.LightenPercent(-0.8f); |
|
|
|
Background = new ImmutableSolidColorBrush(color, 0.9); |
|
} |
|
else if (ActualThemeVariant == ThemeVariant.Light) |
|
{ |
|
// Similar effect here |
|
var color = this.TryFindResource("SolidBackgroundFillColorBase", |
|
ThemeVariant.Light, out var value) ? (Color2)(Color)value! : new Color2(243, 243, 243); |
|
|
|
color = color.LightenPercent(0.5f); |
|
|
|
Background = new ImmutableSolidColorBrush(color, 0.9); |
|
} |
|
} |
|
}
|
|
|