Xamarin.Формы: приложение не отображает элементы на странице

#c# #xamarin.forms #execution

#c# #xamarin.forms #выполнение

Вопрос:

В настоящее время я учусь использовать Xamarin.Формы и C # (первая неделя в нем), и я пытаюсь создать базовое приложение для входа в систему.
Я начал с пустого шаблона. Теперь, когда я запускаю свое приложение, появляется только основной экран, но не элементы на странице. Что не так?

App.xaml.cs

 using Xamarin.Forms;

namespace XamarinApp
{
    public partial class App : Application
    {
        public App()
        {
            InitializeComponent();

            new LoginPage();
        }

        protected override void OnStart()
        {
        }

        protected override void OnSleep()
        {
        }

        protected override void OnResume()
        {
        }
    }
}

  

LoginPage.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="XamarinApp.LoginPage">
    <ContentPage.Content>
        <StackLayout>
            <Label 
                Text="Welcome"
                />
        </StackLayout>
    </ContentPage.Content>
</ContentPage>
  

LoginPage.xaml.cs

 using Xamarin.Forms;

namespace XamarinApp
{
    public partial class LoginPage : ContentPage
    {
        public LoginPage()
        {
            InitializeComponent();
        }

    }
}
  

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

1. Попробуйте изменить new LoginPage(); на this.MainPage = new LoginPage();

2. @Bijington, что это за колдовство? Что было не так с моим кодом? Кроме того, у меня нет MainPage.xaml в моем коде. Почему мне все еще нужно использовать this.MainPage ?

3. вам нужно определить, что такое начальная страница. MainPage App я подозреваю, что в вашем файле уже может быть что-то App.xaml , что указывает на страницу.

4. @Bijington, это мое приложение.xaml

5. new LoginPage(); просто создает новый экземпляр страницы в памяти. Если вы не назначите его чему-либо, оно просто останется в памяти, пока GC не очистит его. Это верно для любого объекта C #.

Ответ №1:

TL-DR

Я считаю, что для решения вашей проблемы вам нужно будет изменить свою строку:

 new LoginPage();
  

Для:

 MainPage = new LoginPage();
  

Мои рассуждения

Вам нужно указать, что MainPage это такое. Эта часть может показаться запутанной при первом запуске, потому что предоставляемая страница примера также вызывается MainPage , но одна из них является class/Page реализацией, а другая ключевая часть — это свойство, предоставляемое Application классом App , от которого наследуется ваш класс. Чтобы приложение при запуске знало, что оно запускается Page .

Обычно при создании нового пустого Xamarin.Приложение Forms вы увидите следующий код в App.xaml.cs

 public App()
{
    InitializeComponent();

    MainPage = new MainPage();
}
  

Я подозреваю, что ваши изменения для добавления на вашу страницу входа каким-то образом привели к удалению ключевой части: MainPage = из этой строки.

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

1. Я все еще не понимаю, что MainPage = new MainPage() делает. Это выглядит как System.Int32 = new System.Int32() , или classname = new classname() . Разве это не должно быть MainPage mainPage = new MainPage() ?

2. Да, к сожалению, для целей этого вопроса класс и свойство имеют одно и то же имя. MainPage слева на самом деле находится свойство, а не тип. Это предоставляется вам Application классом, предоставленным Microsoft learn.microsoft.com/en-us/dotnet/api /…