示例#1
0
文件: LightBox.cs 项目: csbuja/Lighty
        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);
        }
示例#2
0
        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;
        }