Существующие элементы управления исчезают при динамическом добавлении новых элементов управления в xamarin.forms

Я новичок и учусь разрабатывать кроссплатформенное приложение в формах xamarin в Visual Studio 2015. У меня есть stackLayout, в котором присутствуют такие элементы, как Label и кнопка «ОК». Я хочу добавить новую метку под кнопкой «ОК» при нажатии кнопки «ОК» (динамическое добавление элемента управления). Но когда я это делаю, новая кнопка добавляет метку, но существующие элементы управления (метка и кнопка) исчезают куда-то. Я где-то ошибаюсь? Пожалуйста, помогите мне решить эту проблему. [Прикрепленное изображение показывает мой результат] [1]

Изображение: [1]: https://i.stack.imgur.com/YLlQN.jpg< /а>

Ниже приведен код моего приложения.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

using Xamarin.Forms;

namespace Practise
{
    public partial class Page2 : ContentPage
    {
        public Page2 ()
        {enter code here
            InitializeComponent ();
        }

        private void OkButton_Clicked(object sender, EventArgs e)
        {
            var layout = new StackLayout();
            var label = new Label { Text = "This is a new label.", TextColor = Color.FromHex("#77d065"), FontSize = 30, TranslationY = 30 };
            this.Content = layout;
            layout.Children.Add(label);
        }
    }
}

XAML-код:

<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             x:Class="Practise.Page2" Title="App1">
    <StackLayout>

            <Label Text="Click to add new label" HorizontalOptions="Center"  TranslationY="45" FontSize="Medium"/>
        <Button x:Name="OkButton" Clicked="OkButton_Clicked"  Text="Ok" HorizontalOptions="Center" WidthRequest="100" VerticalOptions="Center" HeightRequest="45" TranslationY="60"/>

    </StackLayout>
</ContentPage>

Спасибо


person Satish Saini    schedule 22.11.2016    source источник


Ответы (1)


ContentPage имеет только один элемент Content. Этот код создает НОВЫЙ StackLayout и заменяет существующее содержимое (определенное в XAML) новым содержимым.

var layout = new StackLayout();
var label = new Label { Text = "This is a new label.", TextColor = Color.FromHex("#77d065"), FontSize = 30, TranslationY = 30 };
this.Content = layout;
layout.Children.Add(label);

чтобы добавить дополнительный контент в существующий макет (вам нужно будет добавить x:Name="layout" в объявление XAML StackLayout)

var label = new Label { Text = "This is a new label.", TextColor = Color.FromHex("#77d065"), FontSize = 30, TranslationY = 30 };
layout.Children.Add(label);
person Jason    schedule 22.11.2016
comment
Спасибо, сэр. Ваше предложение сработало очень хорошо для меня. Я также хотел бы знать, могу ли я иметь страницу навигации и страницу с вкладками вместе? У меня есть три страницы xaml: A.xaml, B.xaml, C.xaml. Я сделал A страницей навигации, написав код MainPage = new NavigationPage(new A()); в App.cs. Теперь я хочу, чтобы B и C были вкладками. Итак, я хочу перейти на вкладки B и C, нажав кнопку на странице A. Как я могу это реализовать? - person Satish Saini; 23.11.2016