private static LightBoxAdorner CreateAdornerCore(UIElement element, LightBox lightbox) { // Window系のクラスだったら、Contentプロパティを利用。それ以外の場合はそのまま利用。 var win = element as Window; var target = win?.Content as UIElement ?? element; if (target == null) { return(null); } var layer = AdornerLayer.GetAdornerLayer(target); if (layer == null) { return(null); } // ダイアログ用のAdornerが存在してないので、新規に作って設定して返す。 var adorner = new LightBoxAdorner(target); adorner.SetRoot(lightbox); // Windowに対してAdornerを設定していた場合は、Content要素のMarginを打ち消すためのマージン設定を行う。 if (win != null) { var content = win.Content as FrameworkElement; var margin = content.Margin; adorner.Margin = new Thickness(-margin.Left, -margin.Top, margin.Right, margin.Bottom); adorner.UseAdornedElementSize = false; } // ダイアログ表示時にtargetがEnableだった場合、ダイアログ表示中だけDisable化する。 if (target.IsEnabled) { target.IsEnabled = false; lightbox.AllDialogClosed += (s, e) => { target.IsEnabled = true; }; } // すべてのダイアログがクリアされたときに、Adornerを削除するための処理を追加 lightbox.AllDialogClosed += (s, e) => { layer?.Remove(adorner); }; layer.Add(adorner); return(adorner); }
private static LightBoxAdorner CreateAdornerCore(UIElement element, LightBox lightbox) { // Window系のクラスだったら、Contentプロパティを利用。それ以外の場合はそのまま利用。 var win = element as Window; var target = win?.Content as UIElement ?? element; if (target == null) return null; var layer = AdornerLayer.GetAdornerLayer(target); if (layer == null) return null; // ダイアログ用のAdornerが存在してないので、新規に作って設定して返す。 var adorner = new LightBoxAdorner(target); adorner.SetRoot(lightbox); // Windowに対してAdornerを設定していた場合は、Content要素のMarginを打ち消すためのマージン設定を行う。 if (win != null) { var content = win.Content as FrameworkElement; var margin = content.Margin; adorner.Margin = new Thickness(-margin.Left, -margin.Top, margin.Right, margin.Bottom); adorner.UseAdornedElementSize = false; } // すべてのダイアログがクリアされたときに、Adornerを削除するための処理を追加 lightbox.AllDialogClosed += (s, e) => { layer?.Remove(adorner); }; layer.Add(adorner); return adorner; }