private static LightBoxAdorner GetAdorner(UIElement element) { // Window系のクラスだったら、Contentプロパティを利用。それ以外の場合はそのまま利用。 var target = (element as Window)?.Content as UIElement ?? element; if (element == null) return null; var layer = AdornerLayer.GetAdornerLayer(target); if (layer == null) return null; var current = layer.GetAdorners(target) ?.OfType<LightBoxAdorner>() ?.SingleOrDefault(); if (current != null) { return current; } else { // ダイアログ用のAdornerが存在してないので、新規に作って設定して返す。 var adorner = new LightBoxAdorner(target, element); // すべてのダイアログがクリアされたときに、Adornerを削除するための処理を追加 adorner.AllDialogClosed += (s, e) => { ClearAdorner(layer, adorner); }; layer.Add(adorner); return adorner; } }
private static LightBoxAdorner GetAdorner(UIElement element) { // Window系のクラスだったら、Contentプロパティを利用。それ以外の場合はそのまま利用。 var target = (element as Window)?.Content as UIElement ?? element; if (element == null) { return(null); } var layer = AdornerLayer.GetAdornerLayer(target); if (layer == null) { return(null); } var current = layer.GetAdorners(target) ?.OfType <LightBoxAdorner>() ?.SingleOrDefault(); if (current != null) { return(current); } else { // ダイアログ用のAdornerが存在してないので、新規に作って設定して返す。 var adorner = new LightBoxAdorner(target, element); // すべてのダイアログがクリアされたときに、Adornerを削除するための処理を追加 adorner.AllDialogClosed += (s, e) => { ClearAdorner(layer, adorner); }; layer.Add(adorner); return(adorner); } }
private static void ClearAdorner(AdornerLayer layer, LightBoxAdorner adorner) { // null条件演算子でいいかも。 if (layer != null && adorner != null) { layer.Remove(adorner); } }