Система выдает исключение при нажатии кнопки навигации в приложении Xamarin.Forms

При нажатии кнопки навигации система выдает исключение в моем приложении xamarin.Form. Я пытаюсь получить текстовое значение email и отобразить его на странице Home.

Exception: Unhandled Exception: System.InvalidOperationException: 
<Timeout exceeded getting exception details>`

Главная страница.xaml.cs;

public partial class MainPage : ContentPage
{
    public MainPage()
    {
        InitializeComponent();
        var emailText = emailEntry.Text;
        var passwordText = passwordEntry.Text;
    }
    int count = 0;

    public void Button_Clicked(object sender, System.EventArgs e)
    {
        string text = emailEntry.Text;
    }

    public async void NavigateButton_OnClicked(object sender, EventArgs e)
    {
        await Navigation.PushAsync(new Home(emailEntry.Text));
    }
}

Ниже приведен мой Home.xaml.cs, где мне нужно отобразить текстовое значение электронной почты из MainPage.xaml.cs;

public partial class Home : ContentPage
{
    public Home(string parameter1)
    {
        InitializeComponent();
        HomeLabel.Text = parameter1;
    }
}

Подробности App.xaml.cs ниже;

public partial class App : Application
{
    string parameter1;
    public App()
    {
        InitializeComponent();
        var tabbedPage = new TabbedPage();
        tabbedPage.Children.Add(new Home(parameter1));
        tabbedPage.Children.Add(new Map());
        tabbedPage.Children.Add(new Settings());
        MainPage = new MainPage();
        //MainPage = new TabbedPage();
        //MainPage = tabbedPage;
    }

    protected override void OnStart()
    {
        // Handle when your app starts
    }

    protected override void OnSleep()
    {
        // Handle when your app sleeps
    }

    protected override void OnResume()
    {
        // Handle when your app resumes
    }
}

MainPage.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"
    xmlns:local = "clr-namespace:soccerapp"
    x:Class = "soccerapp.MainPage">

    <StackLayout Spacing = "20" Padding = "50">
        <Entry x:Name = "emailEntry" Placeholder = "Email Id"></Entry>
        <Entry x:Name = "passwordEntry" Placeholder = "Password" IsPassword = "True"></Entry>
        <Button Text = "Log In"  Clicked = "Button_Clicked" TextColor = "White" BackgroundColor = "#404751"></Button>
        <Button Text = "Navigate to Home"  Clicked = "NavigateButton_OnClicked" TextColor = "White" BackgroundColor = "ForestGreen"></Button>

        <!-- Place new controls here -->
        <Label Text = "Welcome Mate!" HorizontalOptions = "Center" VerticalOptions = "CenterAndExpand" />
        </StackLayout>

</ContentPage>

Дом.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 = "soccerapp.Home" BackgroundColor = "GreenYellow" Title = "Home">
    <ContentPage.Content>
        <StackLayout>
            <Label x:Name = "HomeLabel"  Text = "Home Page is here" TextColor = "White"
            VerticalOptions = "CenterAndExpand" 
            HorizontalOptions = "CenterAndExpand"></Label>
        </StackLayout>
    </ContentPage.Content>
</ContentPage>

Можете ли вы опубликовать свой xaml

Patrick Goode 10.04.2019 05:20

InvalidOperationException здесь кажется странным. Можете ли вы проверить трассировку стека, чтобы увидеть источник исключения?

Jason 10.04.2019 05:27

Зачем вы используете Navigation.PushAsync(new Home(...)), если эта страница уже есть в вашем TabbedPage?

Денис Чорный 10.04.2019 05:27

на самом деле он не использует эту TabbedPage. Но это поднимает хороший вопрос, он пытается использовать Навигацию, когда у него нет NavigationPage

Jason 10.04.2019 05:31

Главная страница = новая страница навигации (новая главная страница());

Jason 10.04.2019 05:32

Если я использую MainPage = new NavigationPage(new MainPage());, я успешно перехожу на главную и отображается текстовое значение, но в этом случае я не вижу другие вкладки, такие как Map, Settings

soccerway 10.04.2019 05:45

@soccerway, пожалуйста, посмотрите мой ответ, вы неправильно используете Navigation и TabbedPage.

Денис Чорный 10.04.2019 05:50
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
7
80
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Хорошо, прежде всего вам нужно создать NavigationPage в вашем App.xaml.cs. Кроме того, вам нужно переместить вашу TabbedPage инициализацию в отдельный xaml файл или в NavigationsClicked событие.

  1. Отредактируйте свой App.xaml.cs:
public App()
    {
        InitializeComponent();
        MainPage = new NavigationPage(new MainPage());
    }
  1. Есть 2 способа сделать это:

Создайте свою TabbedPage в событии NavigationClicked:

public async void NavigateButton_OnClicked(object sender, EventArgs e)
{
    var tabbedPage = new TabbedPage();
    tabbedPage.Children.Add(new Home(parameter1));
    tabbedPage.Children.Add(new Map());
    tabbedPage.Children.Add(new Settings());
    await Navigation.PushAsync(tabbedPage);
}

или создайте новый файл XAML для TabbedPage:

<TabbedPage xmlns = "http://xamarin.com/schemas/2014/forms"
            xmlns:x = "http://schemas.microsoft.com/winfx/2009/xaml"
            x:Class = "MyTabbedPage">
  <!--Pages can be added as references or inline-->
    <ContentPage Title = "HomeTitle">
  <!--Content for Home Page-->
    </ContentPage>

    <ContentPage Title = "MapTitle">
  <!--Content for Map Page-->
    </ContentPage>

    <ContentPage Title = "SettingsTitle">
  <!--Content for Settings Page-->
    </ContentPage>
</TabbedPage>

Извините, я не понял этого полностью, где мне нужно добавить CurrentPage = Children[yourSpecificIndex];

soccerway 10.04.2019 05:55

@soccerway хм, кстати, я ошибаюсь. Вы не использовали свою страницу с вкладками в приложении. Сейчас я отредактирую свой ответ, пожалуйста, подождите.

Денис Чорный 10.04.2019 06:04

Спасибо, я это видел, но что вы подразумеваете под CurrentPage, в моем случае это должно быть MainPage, верно?

soccerway 10.04.2019 06:04

Теперь я в замешательстве, почему я не должен использовать страницу с вкладками? Где теперь внести изменения?

soccerway 10.04.2019 06:14

@soccerway Да, ты должен. Вы должны использовать TabbedPage, но правильно. Вы инициализируете его в App.xaml.cs, но никогда не используете. Пожалуйста, смотрите мой ответ, отредактируйте.

Денис Чорный 10.04.2019 06:18

Теперь я могу передать текст электронной почты на домашнюю страницу в соответствии с рекомендациями, но не могу видеть все вкладки при переходе на домашнюю страницу.

soccerway 10.04.2019 06:25

@soccerway предоставьте фрагмент кода того, что вы сделали.

Денис Чорный 10.04.2019 06:27

Круто, теперь это работает, приму ваш ответ

soccerway 10.04.2019 06:42

Небольшую опечатку тут исправить await Navigation.PushAsync(tabbedPage());, думаю так и должно быть await Navigation.PushAsync(tabbedPage);

soccerway 10.04.2019 06:46

Другие вопросы по теме