При нажатии кнопки навигации система выдает исключение в моем приложении 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>
InvalidOperationException здесь кажется странным. Можете ли вы проверить трассировку стека, чтобы увидеть источник исключения?
Зачем вы используете Navigation.PushAsync(new Home(...))
, если эта страница уже есть в вашем TabbedPage
?
на самом деле он не использует эту TabbedPage. Но это поднимает хороший вопрос, он пытается использовать Навигацию, когда у него нет NavigationPage
Главная страница = новая страница навигации (новая главная страница());
Если я использую MainPage = new NavigationPage(new MainPage());
, я успешно перехожу на главную и отображается текстовое значение, но в этом случае я не вижу другие вкладки, такие как Map, Settings
@soccerway, пожалуйста, посмотрите мой ответ, вы неправильно используете Navigation
и TabbedPage
.
Хорошо, прежде всего вам нужно создать NavigationPage
в вашем App.xaml.cs. Кроме того, вам нужно переместить вашу TabbedPage
инициализацию в отдельный xaml
файл или в NavigationsClicked
событие.
public App()
{
InitializeComponent();
MainPage = new NavigationPage(new MainPage());
}
Создайте свою 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 хм, кстати, я ошибаюсь. Вы не использовали свою страницу с вкладками в приложении. Сейчас я отредактирую свой ответ, пожалуйста, подождите.
Спасибо, я это видел, но что вы подразумеваете под CurrentPage
, в моем случае это должно быть MainPage, верно?
Теперь я в замешательстве, почему я не должен использовать страницу с вкладками? Где теперь внести изменения?
@soccerway Да, ты должен. Вы должны использовать TabbedPage
, но правильно. Вы инициализируете его в App.xaml.cs, но никогда не используете. Пожалуйста, смотрите мой ответ, отредактируйте.
Теперь я могу передать текст электронной почты на домашнюю страницу в соответствии с рекомендациями, но не могу видеть все вкладки при переходе на домашнюю страницу.
@soccerway предоставьте фрагмент кода того, что вы сделали.
Круто, теперь это работает, приму ваш ответ
Небольшую опечатку тут исправить await Navigation.PushAsync(tabbedPage());
, думаю так и должно быть await Navigation.PushAsync(tabbedPage);
Можете ли вы опубликовать свой xaml