diff --git a/src/Avalonia.Native/WindowImplBase.cs b/src/Avalonia.Native/WindowImplBase.cs index c8198f0da2..0fe0c5e7c0 100644 --- a/src/Avalonia.Native/WindowImplBase.cs +++ b/src/Avalonia.Native/WindowImplBase.cs @@ -485,27 +485,27 @@ namespace Avalonia.Native _native?.BeginDragAndDropOperation(effects, point, clipboard, callback, sourceHandle); } - public void SetTransparencyLevelHint(IReadOnlyList transparencyLevel) - { - ////if (TransparencyLevel != transparencyLevel) - ////{ - //// if (transparencyLevel == WindowTransparencyLevel.Blur || - //// transparencyLevel == WindowTransparencyLevel.AcrylicBlur || - //// transparencyLevel == WindowTransparencyLevel.Mica) - //// { - //// transparencyLevel = WindowTransparencyLevel.AcrylicBlur; - //// } - - //// TransparencyLevel = transparencyLevel; - - //// _native.SetTransparencyMode(transparencyLevel == WindowTransparencyLevel.None - //// ? AvnWindowTransparencyMode.Opaque - //// : transparencyLevel == WindowTransparencyLevel.Transparent - //// ? AvnWindowTransparencyMode.Transparent - //// : AvnWindowTransparencyMode.Blur); - - //// TransparencyLevelChanged?.Invoke(TransparencyLevel); - ////} + public void SetTransparencyLevelHint(IReadOnlyList transparencyLevels) + { + foreach (var level in transparencyLevels) + { + AvnWindowTransparencyMode? mode = null; + + if (level == WindowTransparencyLevel.None) + mode = AvnWindowTransparencyMode.Opaque; + if (level == WindowTransparencyLevel.Transparent) + mode = AvnWindowTransparencyMode.Transparent; + else if (level == WindowTransparencyLevel.AcrylicBlur) + mode = AvnWindowTransparencyMode.Blur; + + if (mode.HasValue) + { + _native?.SetTransparencyMode(mode.Value); + TransparencyLevel = level; + TransparencyLevelChanged?.Invoke(TransparencyLevel); + break; + } + } } public WindowTransparencyLevel TransparencyLevel { get; private set; } = WindowTransparencyLevel.None;