diff --git a/src/Avalonia.Controls/Embedding/Offscreen/OffscreenTopLevelImpl.cs b/src/Avalonia.Controls/Embedding/Offscreen/OffscreenTopLevelImpl.cs
index 625acb17c3..09f9ed7c1b 100644
--- a/src/Avalonia.Controls/Embedding/Offscreen/OffscreenTopLevelImpl.cs
+++ b/src/Avalonia.Controls/Embedding/Offscreen/OffscreenTopLevelImpl.cs
@@ -65,7 +65,9 @@ namespace Avalonia.Controls.Embedding.Offscreen
public Action Closed { get; set; }
public abstract IMouseDevice MouseDevice { get; }
- public WindowTransparencyLevel TransparencyLevelHint { get => WindowTransparencyLevel.None; set { } }
+ public void SetTransparencyLevelHint(WindowTransparencyLevel transparencyLevel) { }
+
+ public WindowTransparencyLevel TransparencyLevel { get; private set; }
public IPopupImpl CreatePopup() => null;
}
diff --git a/src/Avalonia.Controls/Platform/ITopLevelImpl.cs b/src/Avalonia.Controls/Platform/ITopLevelImpl.cs
index 4bcfaf91d6..c7875f6413 100644
--- a/src/Avalonia.Controls/Platform/ITopLevelImpl.cs
+++ b/src/Avalonia.Controls/Platform/ITopLevelImpl.cs
@@ -114,8 +114,13 @@ namespace Avalonia.Platform
IPopupImpl CreatePopup();
///
- /// Gets or sets the of the TopLevel.
+ /// Sets the hint of the TopLevel.
///
- WindowTransparencyLevel TransparencyLevelHint { get; set; }
+ void SetTransparencyLevelHint(WindowTransparencyLevel transparencyLevel);
+
+ ///
+ /// Gets the current of the TopLevel.
+ ///
+ WindowTransparencyLevel TransparencyLevel { get; }
}
}
diff --git a/src/Avalonia.Controls/TopLevel.cs b/src/Avalonia.Controls/TopLevel.cs
index 6c09420f35..b61623a759 100644
--- a/src/Avalonia.Controls/TopLevel.cs
+++ b/src/Avalonia.Controls/TopLevel.cs
@@ -83,7 +83,7 @@ namespace Avalonia.Controls
AffectsMeasure(ClientSizeProperty);
TransparencyLevelHintProperty.Changed.AddClassHandler(
- (tl, e) => { if (tl.PlatformImpl != null) tl.PlatformImpl.TransparencyLevelHint = (WindowTransparencyLevel)e.NewValue; });
+ (tl, e) => { if (tl.PlatformImpl != null) tl.PlatformImpl.SetTransparencyLevelHint((WindowTransparencyLevel)e.NewValue); });
}
///
@@ -402,7 +402,7 @@ namespace Avalonia.Controls
_transparencyFallbackBorder = e.NameScope.Find("PART_TransparencyFallback");
- HandleTransparencyLevelChanged(PlatformImpl.TransparencyLevelHint);
+ HandleTransparencyLevelChanged(PlatformImpl.TransparencyLevel);
}
///
diff --git a/src/Avalonia.DesignerSupport/Remote/Stubs.cs b/src/Avalonia.DesignerSupport/Remote/Stubs.cs
index 95284f18fe..a9665b1519 100644
--- a/src/Avalonia.DesignerSupport/Remote/Stubs.cs
+++ b/src/Avalonia.DesignerSupport/Remote/Stubs.cs
@@ -144,7 +144,9 @@ namespace Avalonia.DesignerSupport.Remote
public Action GotInputWhenDisabled { get; set; }
- public WindowTransparencyLevel TransparencyLevelHint { get => WindowTransparencyLevel.None; set { } }
+ public void SetTransparencyLevelHint(WindowTransparencyLevel transparencyLevel) { }
+
+ public WindowTransparencyLevel TransparencyLevel { get; private set; }
}
class ClipboardStub : IClipboard
diff --git a/src/Avalonia.Native/WindowImplBase.cs b/src/Avalonia.Native/WindowImplBase.cs
index 5852675fb6..5072d98256 100644
--- a/src/Avalonia.Native/WindowImplBase.cs
+++ b/src/Avalonia.Native/WindowImplBase.cs
@@ -391,23 +391,19 @@ namespace Avalonia.Native
_native.BeginDragAndDropOperation(effects, point, clipboard, callback, sourceHandle);
}
- private WindowTransparencyLevel _transparencyLevel;
-
- public WindowTransparencyLevel TransparencyLevelHint
+ public void SetTransparencyLevelHint(WindowTransparencyLevel transparencyLevel)
{
- get => _transparencyLevel;
- set
+ if (TransparencyLevel != transparencyLevel)
{
- if(_transparencyLevel != value)
- {
- _transparencyLevel = value;
+ TransparencyLevel = transparencyLevel;
- _native.SetBlurEnabled(_transparencyLevel >= WindowTransparencyLevel.Blur);
- TransparencyLevelChanged?.Invoke(_transparencyLevel);
- }
- }
+ _native.SetBlurEnabled(TransparencyLevel >= WindowTransparencyLevel.Blur);
+ TransparencyLevelChanged?.Invoke(TransparencyLevel);
+ }
}
+ public WindowTransparencyLevel TransparencyLevel { get; private set; }
+
public IPlatformHandle Handle { get; private set; }
}
}
diff --git a/src/Avalonia.X11/X11Window.cs b/src/Avalonia.X11/X11Window.cs
index 6006135a2b..bce82b2954 100644
--- a/src/Avalonia.X11/X11Window.cs
+++ b/src/Avalonia.X11/X11Window.cs
@@ -1086,6 +1086,9 @@ namespace Avalonia.X11
public IPopupPositioner PopupPositioner { get; }
public ITopLevelNativeMenuExporter NativeMenuExporter { get; }
- public WindowTransparencyLevel TransparencyLevelHint { get; set; }
+
+ public void SetTransparencyLevelHint(WindowTransparencyLevel transparencyLevel) { }
+
+ public WindowTransparencyLevel TransparencyLevel { get; private set; }
}
}
diff --git a/src/Linux/Avalonia.LinuxFramebuffer/FramebufferToplevelImpl.cs b/src/Linux/Avalonia.LinuxFramebuffer/FramebufferToplevelImpl.cs
index 3f50e1e4eb..d4a29e39c6 100644
--- a/src/Linux/Avalonia.LinuxFramebuffer/FramebufferToplevelImpl.cs
+++ b/src/Linux/Avalonia.LinuxFramebuffer/FramebufferToplevelImpl.cs
@@ -83,6 +83,8 @@ namespace Avalonia.LinuxFramebuffer
public Size ScaledSize => _outputBackend.PixelSize.ToSize(Scaling);
- public WindowTransparencyLevel TransparencyLevelHint { get => WindowTransparencyLevel.None; set { } }
+ public void SetTransparencyLevelHint(WindowTransparencyLevel transparencyLevel) { }
+
+ public WindowTransparencyLevel TransparencyLevel { get; private set; }
}
}
diff --git a/src/Windows/Avalonia.Win32/WindowImpl.cs b/src/Windows/Avalonia.Win32/WindowImpl.cs
index 5eb92a4023..e9c14274cd 100644
--- a/src/Windows/Avalonia.Win32/WindowImpl.cs
+++ b/src/Windows/Avalonia.Win32/WindowImpl.cs
@@ -66,8 +66,7 @@ namespace Avalonia.Win32
private OleDropTarget _dropTarget;
private Size _minSize;
private Size _maxSize;
- private WindowImpl _parent;
- private WindowTransparencyLevel _transparencyLevel = WindowTransparencyLevel.None;
+ private WindowImpl _parent;
public WindowImpl()
{
@@ -210,18 +209,16 @@ namespace Avalonia.Win32
}
}
- public WindowTransparencyLevel TransparencyLevelHint
+ public WindowTransparencyLevel TransparencyLevel { get; private set; }
+
+ public void SetTransparencyLevelHint (WindowTransparencyLevel transparencyLevel)
{
- get => _transparencyLevel;
- set
- {
- var oldValue = _transparencyLevel;
- _transparencyLevel = EnableBlur(value);
+ var level = EnableBlur(transparencyLevel);
- if (oldValue != _transparencyLevel)
- {
- TransparencyLevelChanged?.Invoke(_transparencyLevel);
- }
+ if (TransparencyLevel != level)
+ {
+ TransparencyLevel = level;
+ TransparencyLevelChanged?.Invoke(TransparencyLevel);
}
}
@@ -281,7 +278,7 @@ namespace Avalonia.Win32
SetWindowCompositionAttribute(_hwnd, ref data);
- Marshal.FreeHGlobal(accentPtr);
+ Marshal.FreeHGlobal(accentPtr);
return transparencyLevel;
}