public FontCalc(Label label, double fontSize, double containerWidth)
     : this()
 {
     // Save the font size.
     FontSize = fontSize;
     // Recalculate the Label height.
     label.FontSize = fontSize;
     SizeRequest sizeRequest = label.GetSizeRequest(containerWidth, Double.PositiveInfinity);
     // Save that height.
     TextHeight = sizeRequest.Request.Height;
     TextWidth = sizeRequest.Request.Width;
 }
		public StockStatsPage (string stockTicker)
		{
			var stock = new ChartingAndComparingPrices.ComparingStocks (stockTicker, new DateTime (2014, 1, 1), DateTime.Now);

			RelativeLayout relativeLayout = new RelativeLayout ();

			#region Views
			var largeTicker = new Label {
				Text = stockTicker.ToUpper (),
				FontSize = 30,
				FontAttributes = FontAttributes.Bold,
				HorizontalOptions = LayoutOptions.CenterAndExpand,
				TextColor = MyColors.Clouds,
				WidthRequest = 50,
				HeightRequest = 25
			};

			var standDevLabel = new Label { 
				Text = "Standard Deviation",
				HorizontalOptions = LayoutOptions.CenterAndExpand,
				TextColor = MyColors.Clouds
			};

			var standDevNumber = new Label {
				Text = "$" + System.Math.Round (stock.StandardDev, 2).ToString (),
				HorizontalOptions = LayoutOptions.CenterAndExpand, TextColor = MyColors.Turqoise
			};

			var basicStatsLabel = new Label { 
				Text = "Basic Statistics using Math.Net",
				HorizontalOptions = LayoutOptions.CenterAndExpand,
				TextColor = MyColors.Clouds
			};

			var meanLabel = new Label {
				Text = "Mean: ",
				HorizontalOptions = LayoutOptions.Start, TextColor = MyColors.Clouds
			};

			var mean = new Label {
				Text = "$" + System.Math.Round (stock.Mean, 2).ToString (),
				TextColor = MyColors.Turqoise
			};

			var maxLabel = new Label {
				Text = "Max: ",
				HorizontalOptions = LayoutOptions.Start, TextColor = MyColors.Clouds
			};

			var max = new Label {
				Text = "$" + System.Math.Round (stock.Max, 2),
				TextColor = MyColors.Turqoise
			};

			var minLabel = new Label {
				Text = "Min: ",
				HorizontalOptions = LayoutOptions.Start, TextColor = MyColors.Clouds
			};

			var min = new Label {
				Text = "$" + System.Math.Round (stock.Min, 2),
				TextColor = MyColors.Turqoise
			};

			var stdLabel = new Label {
				Text = "StdDev: ",
				HorizontalOptions = LayoutOptions.Start, TextColor = MyColors.Clouds
			};

			var stdDev = new Label {
				Text = "$" + System.Math.Round (stock.StandardDev, 2).ToString (),
				TextColor = MyColors.Turqoise
			};

			var boxView = new BoxView ();
			boxView.HeightRequest = 2;
			boxView.WidthRequest = App.ScreenWidth;
			boxView.Color = MyColors.Concrete;

			var boxView0 = new BoxView ();
			boxView0.HeightRequest = 1;
			boxView0.WidthRequest = App.ScreenWidth;
			boxView0.Color = MyColors.Concrete;

			var boxView1 = new BoxView ();
			boxView1.HeightRequest = 1;
			boxView1.WidthRequest = App.ScreenWidth;
			boxView1.Color = MyColors.Concrete;

			#endregion

			#region Find view sizes
			Func<RelativeLayout, double> standDevLabelWidth = (p) => standDevLabel.GetSizeRequest (relativeLayout.Width, relativeLayout.Height).Request.Width;

			Func<RelativeLayout, double> standDevNumberWidth = (p) => standDevNumber.GetSizeRequest (relativeLayout.Width, relativeLayout.Height).Request.Width;
			Func<RelativeLayout, double> standDevNumberHeight = (p) => standDevNumber.GetSizeRequest (relativeLayout.Width, relativeLayout.Height).Request.Height;

			Func<RelativeLayout, double> meanNumberWidth = (p) => mean.GetSizeRequest (relativeLayout.Width, relativeLayout.Height).Request.Width;

			Func<RelativeLayout, double> largeTickerWidth = (p) => largeTicker.GetSizeRequest (relativeLayout.Width, relativeLayout.Height).Request.Width;
			Func<RelativeLayout, double> largeTickerHeight = (p) => largeTicker.GetSizeRequest (relativeLayout.Width, relativeLayout.Height).Request.Height;

			Func<RelativeLayout, double> boxViewWidth = (p) => boxView.GetSizeRequest (relativeLayout.Width, relativeLayout.Height).Request.Width;
			Func<RelativeLayout, double> boxViewHeight = (p) => boxView.GetSizeRequest (relativeLayout.Width, relativeLayout.Height).Request.Height;

			Func<RelativeLayout, double> basicStatsLabelWidth = (p) => basicStatsLabel.GetSizeRequest (relativeLayout.Width, relativeLayout.Height).Request.Width;
			Func<RelativeLayout, double> basicStatsLabelHeight = (p) => basicStatsLabel.GetSizeRequest (relativeLayout.Width, relativeLayout.Height).Request.Height;

			Func<RelativeLayout, double> maxLabelHeight = (p) => maxLabel.GetSizeRequest (relativeLayout.Width, relativeLayout.Height).Request.Height;
			#endregion

			BackgroundColor = MyColors.MidnightBlue;

			relativeLayout.Children.Add (
				largeTicker, 
				xConstraint: Constraint.RelativeToParent (p => (p.Width * 0.5 - largeTickerWidth (p) * .5)),
				yConstraint: Constraint.Constant (10),
				widthConstraint: Constraint.RelativeToParent (p => (p.Width * 0.5 - largeTickerWidth (p) * .5))
			);

			relativeLayout.Children.Add (
				boxView,
				xConstraint: Constraint.RelativeToParent (p => (p.Width * 0.5 - boxViewWidth (p) * .5)),
				yConstraint: Constraint.RelativeToParent (p => (largeTicker.Y + largeTickerHeight (p) + 10))
			);

			relativeLayout.Children.Add (
				standDevLabel,
				xConstraint: Constraint.RelativeToParent (p => (p.Width * 0.05)),
				yConstraint: Constraint.RelativeToParent (p => (boxView.Y + boxViewHeight (p) + 10))

			);

			relativeLayout.Children.Add (
				standDevNumber,
				xConstraint: Constraint.RelativeToParent (p => (p.Width - standDevNumberWidth (p) - 15)),
				yConstraint: Constraint.RelativeToParent (p => ((boxView.Y + boxViewHeight (p)) + 10))
			);

			relativeLayout.Children.Add (
				boxView0,
				xConstraint: Constraint.RelativeToParent (p => (p.Width * 0.5 - boxViewWidth (p) * .5)),
				yConstraint: Constraint.RelativeToParent (p => (standDevNumber.Y + standDevNumberHeight (p) + 10))
			);

			relativeLayout.Children.Add (
				basicStatsLabel,
				xConstraint: Constraint.RelativeToParent (p => (p.Width * 0.5 - basicStatsLabelWidth (p) * .5)),
				yConstraint: Constraint.RelativeToParent (p => (boxView0.Y + boxViewHeight (p) + 10))
			);

			relativeLayout.Children.Add (
				boxView1,
				xConstraint: Constraint.RelativeToParent (p => (p.Width * 0.5 - boxViewWidth (p) * .5)),
				yConstraint: Constraint.RelativeToParent (p => (basicStatsLabel.Y + basicStatsLabelHeight (p) + 10))
			);

			relativeLayout.Children.Add (
				meanLabel,
				xConstraint: Constraint.RelativeToParent (p => (p.Width * 0.05)),
				yConstraint: Constraint.RelativeToParent (p => (boxView1.Y + boxViewHeight (p) + 10))
			);

			relativeLayout.Children.Add (
				mean,
				xConstraint: Constraint.RelativeToParent (p => (p.Width - meanNumberWidth(p) - 15)),
				yConstraint: Constraint.RelativeToParent (p => (boxView1.Y + boxViewHeight (p) + 10))
			);

			relativeLayout.Children.Add (
				maxLabel,
				xConstraint: Constraint.RelativeToParent (p => (p.Width * 0.05)),
				yConstraint: Constraint.RelativeToParent (p => (meanLabel.Y + maxLabelHeight (p) + 10))
			);

			relativeLayout.Children.Add (
				max,
				xConstraint: Constraint.RelativeToParent (p => (p.Width - meanNumberWidth(p) - 15)),
				yConstraint: Constraint.RelativeToParent (p => (meanLabel.Y + maxLabelHeight (p) + 10))
			);

			relativeLayout.Children.Add (
				minLabel,
				xConstraint: Constraint.RelativeToParent (p => (p.Width * 0.05)),
				yConstraint: Constraint.RelativeToParent (p => (maxLabel.Y + maxLabelHeight (p) + 10))
			);

			relativeLayout.Children.Add (
				min,
				xConstraint: Constraint.RelativeToParent (p => (p.Width - meanNumberWidth(p) - 15)),
				yConstraint: Constraint.RelativeToParent (p => (maxLabel.Y + maxLabelHeight (p) + 10))
			);

			relativeLayout.Children.Add (
				stdLabel,
				xConstraint: Constraint.RelativeToParent (p => (p.Width * 0.05)),
				yConstraint: Constraint.RelativeToParent (p => (minLabel.Y + maxLabelHeight (p) + 10))
			);

			relativeLayout.Children.Add (
				stdDev,
				xConstraint: Constraint.RelativeToParent (p => (p.Width - meanNumberWidth(p) - 15)),
				yConstraint: Constraint.RelativeToParent (p => (minLabel.Y + maxLabelHeight (p) + 10))
			);

			Content = relativeLayout;
		}