From 013dc50d439725307a2afc767892e26c1f8ebf8f Mon Sep 17 00:00:00 2001 From: Bastian Schmidt Date: Tue, 22 Dec 2015 12:40:30 +0100 Subject: [PATCH] Fixes #228 by recreating the backstage adorner if it's parent AdornerLayer got destroyed --- Fluent.Ribbon/Controls/Backstage.cs | 22 ++++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/Fluent.Ribbon/Controls/Backstage.cs b/Fluent.Ribbon/Controls/Backstage.cs index bcd36ddac..6c0857fa5 100644 --- a/Fluent.Ribbon/Controls/Backstage.cs +++ b/Fluent.Ribbon/Controls/Backstage.cs @@ -39,7 +39,7 @@ public class Backstage : RibbonControl #region Fields // Adorner for backstage - BackstageAdorner adorner; + private BackstageAdorner adorner; #endregion @@ -154,10 +154,7 @@ private static void OnIsOpenChanged(DependencyObject d, DependencyPropertyChange } // Invoke the event - if (backstage.IsOpenChanged != null) - { - backstage.IsOpenChanged(backstage, e); - } + backstage.IsOpenChanged?.Invoke(backstage, e); } } @@ -339,10 +336,7 @@ private void Show() } var content = this.Content as IInputElement; - if (content != null) - { - content.Focus(); - } + content?.Focus(); } private void ShowAdorner() @@ -367,6 +361,14 @@ private void HideAdorner() private void CreateAndAttachBackstageAdorner() { + // It's possible that we created an adorner but it's parent AdornerLayer got destroyed. + // If that's the case we have to destroy our adorner. + // This fixes #228 Backstage disappears when changing DontUseDwm + if (this.adorner?.Parent == null) + { + this.DestroyAdorner(); + } + if (this.adorner != null) { return; @@ -435,7 +437,7 @@ private void DestroyAdorner() } var layer = AdornerLayer.GetAdornerLayer(this); - layer.Remove(this.adorner); + layer?.Remove(this.adorner); this.adorner.Clear(); this.adorner = null;