protected OverlayContentView(bool isChildOfNavigationPage) { _backgroundOverlayBoxView = new BoxView { BackgroundColor = ColorConstants.WhiteWith75Opacity }; _backgroundOverlayBoxView.Opacity = 0; _overlayFrame = new Frame { HasShadow = true, BackgroundColor = Color.White }; _overlayFrame.Scale = 0; _relativeLayout = new RelativeLayout(); _relativeLayout.Children.Add(_backgroundOverlayBoxView, Constraint.Constant(-10), Constraint.Constant(0), Constraint.RelativeToParent(parent => parent.Width + 20), Constraint.RelativeToParent(parent => parent.Height)); _relativeLayout.Children.Add(_overlayFrame, Constraint.RelativeToParent(parent => { var preferredX = parent.Width / 2 - getOverlayContentWidth(parent) / 2 - 25; return(preferredX < 10 ? 10 : preferredX); }), Constraint.RelativeToParent(parent => { if (isChildOfNavigationPage) { return(parent.Height / 4 - getOverlayContentHeight(parent) / 2); } return(parent.Height / 2 - getOverlayContentHeight(parent) / 2 - 10); }), Constraint.RelativeToParent(parent => { var preferedWidth = getOverlayContentWidth(parent) + 50; return(preferedWidth > parent.Width ? parent.Width - 20 : preferedWidth); }), Constraint.RelativeToParent(parent => getOverlayContentHeight(parent) + 40)); double getOverlayContentHeight(RelativeLayout p) => OverlayContent?.Measure(p.Width, p.Height).Request.Height ?? default; double getOverlayContentWidth(RelativeLayout p) => OverlayContent?.Measure(p.Width, p.Height).Request.Width ?? default; }
protected OverlayContentView(bool isChildOfNavigationPage) { _backgroundOverlayBoxView = new BoxView { BackgroundColor = ColorConstants.WhiteWith75Opacity }; _backgroundOverlayBoxView.Opacity = 0; _overlayFrame = new Frame { HasShadow = true, BackgroundColor = Color.White }; _overlayFrame.Scale = 0; _relativeLayout = new RelativeLayout(); Func <RelativeLayout, double> getOverlayContentHeight = (p) => OverlayContent.Measure(_relativeLayout.Width, _relativeLayout.Height).Request.Height; Func <RelativeLayout, double> getOverlayContentWidth = (p) => OverlayContent.Measure(_relativeLayout.Width, _relativeLayout.Height).Request.Width; _relativeLayout.Children.Add(_backgroundOverlayBoxView, Constraint.Constant(-10), Constraint.Constant(0), Constraint.RelativeToParent(parent => parent.Width + 20), Constraint.RelativeToParent(parent => parent.Height) ); _relativeLayout.Children.Add(_overlayFrame, Constraint.RelativeToParent(parent => parent.Width / 2 - getOverlayContentWidth(parent) / 2 - 25), Constraint.RelativeToParent(parent => { switch (isChildOfNavigationPage) { case true: return(parent.Height / 4 - getOverlayContentHeight(parent) / 2); default: return(parent.Height / 2 - getOverlayContentHeight(parent) / 2 - 10); } }), Constraint.RelativeToParent(parent => getOverlayContentWidth(parent) + 50), Constraint.RelativeToParent(parent => getOverlayContentHeight(parent) + 40) ); }