mirror of
https://jihulab.com/DGP-Studio/Snap.Hutao.git
synced 2025-11-19 21:02:53 +08:00
fix notify icon context menu theme
This commit is contained in:
@@ -7,6 +7,8 @@ namespace Snap.Hutao.Control.Helper;
|
||||
|
||||
[SuppressMessage("", "SH001")]
|
||||
[DependencyProperty("SquareLength", typeof(double), 0D, nameof(OnSquareLengthChanged), IsAttached = true, AttachedType = typeof(FrameworkElement))]
|
||||
[DependencyProperty("IsActualThemeBindingEnabled", typeof(bool), false, nameof(OnIsActualThemeBindingEnabled), IsAttached = true, AttachedType = typeof(FrameworkElement))]
|
||||
[DependencyProperty("ActualTheme", typeof(ElementTheme), ElementTheme.Default, IsAttached = true, AttachedType = typeof(FrameworkElement))]
|
||||
public sealed partial class FrameworkElementHelper
|
||||
{
|
||||
private static void OnSquareLengthChanged(DependencyObject dp, DependencyPropertyChangedEventArgs e)
|
||||
@@ -15,4 +17,22 @@ public sealed partial class FrameworkElementHelper
|
||||
element.Width = (double)e.NewValue;
|
||||
element.Height = (double)e.NewValue;
|
||||
}
|
||||
|
||||
private static void OnIsActualThemeBindingEnabled(DependencyObject dp, DependencyPropertyChangedEventArgs e)
|
||||
{
|
||||
FrameworkElement element = (FrameworkElement)dp;
|
||||
if ((bool)e.NewValue)
|
||||
{
|
||||
element.ActualThemeChanged += OnActualThemeChanged;
|
||||
}
|
||||
else
|
||||
{
|
||||
element.ActualThemeChanged -= OnActualThemeChanged;
|
||||
}
|
||||
|
||||
static void OnActualThemeChanged(FrameworkElement sender, object args)
|
||||
{
|
||||
SetActualTheme(sender, sender.ActualTheme);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -10,7 +10,7 @@ using System.Collections.Concurrent;
|
||||
namespace Snap.Hutao.Core.Windowing.Backdrop;
|
||||
|
||||
// https://github.com/microsoft/microsoft-ui-xaml/blob/winui3/release/1.5-stable/controls/dev/Materials/DesktopAcrylicBackdrop/DesktopAcrylicBackdrop.cpp
|
||||
internal sealed class InputActiveDesktopAcrylicBackdrop : SystemBackdrop
|
||||
internal sealed partial class InputActiveDesktopAcrylicBackdrop : SystemBackdrop
|
||||
{
|
||||
private readonly ConcurrentDictionary<ICompositionSupportsSystemBackdrop, DesktopAcrylicController> controllers = [];
|
||||
|
||||
@@ -18,11 +18,10 @@ internal sealed class InputActiveDesktopAcrylicBackdrop : SystemBackdrop
|
||||
{
|
||||
base.OnTargetConnected(target, xamlRoot);
|
||||
|
||||
DesktopAcrylicController newController = new();
|
||||
SystemBackdropConfiguration configuration = GetDefaultSystemBackdropConfiguration(target, xamlRoot);
|
||||
|
||||
configuration.IsInputActive = true;
|
||||
|
||||
DesktopAcrylicController newController = new();
|
||||
newController.AddSystemBackdropTarget(target);
|
||||
newController.SetSystemBackdropConfiguration(configuration);
|
||||
controllers.TryAdd(target, newController);
|
||||
|
||||
@@ -39,15 +39,19 @@ internal sealed class TransparentBackdrop : SystemBackdrop, IBackdropNeedEraseBa
|
||||
}
|
||||
}
|
||||
|
||||
protected override void OnTargetConnected(ICompositionSupportsSystemBackdrop connectedTarget, XamlRoot xamlRoot)
|
||||
protected override void OnTargetConnected(ICompositionSupportsSystemBackdrop target, XamlRoot xamlRoot)
|
||||
{
|
||||
base.OnTargetConnected(target, xamlRoot);
|
||||
|
||||
brush ??= Compositor.CreateColorBrush(tintColor);
|
||||
connectedTarget.SystemBackdrop = brush;
|
||||
target.SystemBackdrop = brush;
|
||||
}
|
||||
|
||||
protected override void OnTargetDisconnected(ICompositionSupportsSystemBackdrop disconnectedTarget)
|
||||
protected override void OnTargetDisconnected(ICompositionSupportsSystemBackdrop target)
|
||||
{
|
||||
disconnectedTarget.SystemBackdrop = null;
|
||||
base.OnTargetDisconnected(target);
|
||||
|
||||
target.SystemBackdrop = null;
|
||||
|
||||
if (compositorLock is not null)
|
||||
{
|
||||
|
||||
@@ -2,8 +2,10 @@
|
||||
x:Class="Snap.Hutao.Core.Windowing.NotifyIcon.NotifyIconContextMenu"
|
||||
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||
xmlns:cw="using:CommunityToolkit.WinUI"
|
||||
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
|
||||
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
|
||||
xmlns:shch="using:Snap.Hutao.Control.Helper"
|
||||
xmlns:shcm="using:Snap.Hutao.Control.Markup"
|
||||
xmlns:shcwb="using:Snap.Hutao.Core.Windowing.Backdrop"
|
||||
xmlns:shv="using:Snap.Hutao.ViewModel"
|
||||
@@ -30,7 +32,10 @@
|
||||
<RowDefinition/>
|
||||
<RowDefinition/>
|
||||
</Grid.RowDefinitions>
|
||||
<TextBlock Margin="8" Text="{Binding Title}"/>
|
||||
<TextBlock
|
||||
Margin="8"
|
||||
Style="{StaticResource BodyTextBlockStyle}"
|
||||
Text="{Binding Title}"/>
|
||||
<Grid Grid.Row="1" Background="{ThemeResource CardBackgroundFillColorSecondaryBrush}">
|
||||
<StackPanel
|
||||
Margin="4,0"
|
||||
|
||||
@@ -30,7 +30,7 @@ internal sealed class NotifyIconController : IDisposable
|
||||
icon = new(iconFile.Path);
|
||||
id = Unsafe.As<byte, Guid>(ref MemoryMarshal.GetArrayDataReference(MD5.HashData(Encoding.UTF8.GetBytes(iconFile.Path))));
|
||||
|
||||
xamlHostWindow = new();
|
||||
xamlHostWindow = new(serviceProvider);
|
||||
|
||||
messageWindow = new()
|
||||
{
|
||||
@@ -46,8 +46,6 @@ internal sealed class NotifyIconController : IDisposable
|
||||
messageWindow.Dispose();
|
||||
NotifyIconMethods.Delete(id);
|
||||
icon.Dispose();
|
||||
|
||||
xamlHostWindow.Dispose();
|
||||
}
|
||||
|
||||
public RECT GetRect()
|
||||
|
||||
@@ -15,11 +15,9 @@ using static Snap.Hutao.Win32.User32;
|
||||
|
||||
namespace Snap.Hutao.Core.Windowing.NotifyIcon;
|
||||
|
||||
internal sealed class NotifyIconXamlHostWindow : Window, IDisposable, IWindowNeedEraseBackground
|
||||
internal sealed class NotifyIconXamlHostWindow : Window, IWindowNeedEraseBackground
|
||||
{
|
||||
private readonly XamlWindowSubclass subclass;
|
||||
|
||||
public NotifyIconXamlHostWindow()
|
||||
public NotifyIconXamlHostWindow(IServiceProvider serviceProvider)
|
||||
{
|
||||
Content = new Border();
|
||||
|
||||
@@ -36,10 +34,7 @@ internal sealed class NotifyIconXamlHostWindow : Window, IDisposable, IWindowNee
|
||||
presenter.SetBorderAndTitleBar(false, false);
|
||||
}
|
||||
|
||||
subclass = new(this);
|
||||
subclass.Initialize();
|
||||
|
||||
Activate();
|
||||
this.InitializeController(serviceProvider);
|
||||
}
|
||||
|
||||
public void ShowFlyoutAt(FlyoutBase flyout, Point point, RECT icon)
|
||||
@@ -60,9 +55,4 @@ internal sealed class NotifyIconXamlHostWindow : Window, IDisposable, IWindowNee
|
||||
ShowMode = FlyoutShowMode.Transient,
|
||||
});
|
||||
}
|
||||
|
||||
public void Dispose()
|
||||
{
|
||||
subclass.Dispose();
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user