Browse Source

fix unsubscribe handler.

Dan Walmsley 5 years ago
parent
commit
60c2e45437
1 changed files with 8 additions and 5 deletions
  1. 8 5
      src/Avalonia.Controls/ExperimentalAcrylicBorder.cs

+ 8 - 5
src/Avalonia.Controls/ExperimentalAcrylicBorder.cs

@@ -16,6 +16,8 @@ namespace Avalonia.Controls
 
         private readonly BorderRenderHelper _borderRenderHelper = new BorderRenderHelper();
 
+        private IDisposable _subscription;
+
         static ExperimentalAcrylicBorder()
         {
             AffectsRender<ExperimentalAcrylicBorder>(
@@ -45,7 +47,7 @@ namespace Avalonia.Controls
 
             var tl = (e.Root as TopLevel);
 
-            tl.GetObservable(TopLevel.ActualTransparencyLevelProperty)
+            _subscription = tl.GetObservable(TopLevel.ActualTransparencyLevelProperty)
                 .Subscribe(x =>
                 {
                     switch (x)
@@ -69,19 +71,20 @@ namespace Avalonia.Controls
         protected override void OnDetachedFromVisualTree(VisualTreeAttachmentEventArgs e)
         {
             base.OnDetachedFromVisualTree(e);
-        }
 
+            _subscription?.Dispose();
+        }
 
         public override void Render(DrawingContext context)
         {
-            if(context.PlatformImpl is IDrawingContextWithAcrylicLikeSupport idc)
+            if (context.PlatformImpl is IDrawingContextWithAcrylicLikeSupport idc)
             {
                 var cornerRadius = CornerRadius;
 
                 idc.DrawRectangle(
-                    Material, 
+                    Material,
                     new RoundedRect(
-                        new Rect(Bounds.Size), 
+                        new Rect(Bounds.Size),
                         cornerRadius.TopLeft, cornerRadius.TopRight,
                         cornerRadius.BottomRight, cornerRadius.BottomLeft));
             }