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

#xamarin #xamarin.forms

#xamarin #xamarin.forms

Вопрос:

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

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

MainPage.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>
  

Home.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>
  

Комментарии:

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

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

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

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

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

Ответ №1:

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

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

Создайте свою страницу вкладок в 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>
  

Комментарии:

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

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

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

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

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