#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
событие.
- Отредактируйте свой App.xaml.cs:
public App()
{
InitializeComponent();
MainPage = new NavigationPage(new MainPage());
}
- Есть 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, но никогда не используете. Пожалуйста, посмотрите мое редактирование ответа.