void BuildDynamicContent(string viewString) { viewString = @"{ 'Type': 'StackLayout', 'Orientation': 'Vertical', 'Children':[ { 'Type': 'StackLayout', 'Orientation': 'Horizontal', 'HorizontalOptions': 'CenterAndExpand', 'VerticalOptions': 'CenterAndExpand', 'Children':[ { 'Type': 'Label', 'Text': 'Hello world!', 'HorizontalOptions': 'CenterAndExpand' }, { 'Type': 'Label', 'Text': 'Another label!', 'TextColor': 'Blue', 'HorizontalOptions': 'CenterAndExpand' } ] }, { 'Type': 'Label', 'HorizontalOptions': 'CenterAndExpand', 'VerticalOptions': 'CenterAndExpand', 'Text': 'This label is not a child' } ] }"; SerializableStackLayout deserializedView = JsonConvert.DeserializeObject <SerializableStackLayout>(viewString, new SerializableViewElementConverter()); StackLayout content = (StackLayout)ViewBuilder.BuildView(deserializedView); Button scanButton = new Button() { HorizontalOptions = LayoutOptions.CenterAndExpand, Text = "Start Scanning" }; scanButton.Clicked += Scan_Clicked; content.Children.Add(scanButton); ScrollView scroll = new ScrollView(); scroll.Content = content; Device.BeginInvokeOnMainThread(() => { Content = scroll; }); }