Переключить / загрузить новую страницу сведений в Xamarin через код - PullRequest
0 голосов
/ 14 ноября 2018

Как мне загрузить / переключиться между страницами, как если бы вы использовали боковое меню Masterdetailpage через код?

video

Если вы щелкнете по имени страницы в боковом меню, вы перейдете на эту страницу, удерживая кнопку меню на новой странице. Как вы делаете это с помощью кода?

MainPage.xaml (это домашняя страница)

<MasterDetailPage xmlns="http://xamarin.com/schemas/2014/forms" 
              xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" 
              xmlns:local="clr-namespace:TimeToSport;assembly=TimeToSport"
              xmlns:local1="clr-namespace:TimeToSport.Views.Main"
              xmlns:local2="clr-namespace:TimeToSport.Views"
              x:Class="TimeToSport.Views.Main.MainPage">
<MasterDetailPage.Master>
    <local1:MasterPage x:Name="masterPage" />
</MasterDetailPage.Master>
<MasterDetailPage.Detail>
    <NavigationPage>
        <x:Arguments>
            <local2:ItemsPage />
        </x:Arguments>
    </NavigationPage>
</MasterDetailPage.Detail>

MasterPage.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:TimeToSport.Views"
             xmlns:local1="clr-namespace:TimeToSport.Views"
             x:Class="TimeToSport.Views.Main.MasterPage"
             Padding="0,40,0,0"
             Icon="hamburger.png"
             Title="Personal Organiser">
    <StackLayout>
        <ListView x:Name="listView" x:FieldModifier="public">
            <ListView.ItemsSource>
                <x:Array Type="{x:Type local:MasterPageItem}">
                    <local1:MasterPageItem Title="Home" IconSource="contacts.png" TargetType="{x:Type local:ItemsPage}" />
                    <local1:MasterPageItem Title="Slaap" IconSource="todo.png" TargetType="{x:Type local:SlaapPage}" />
                    <local1:MasterPageItem Title="Voeding" IconSource="reminders.png" TargetType="{x:Type local:VoedingPage}" />
                </x:Array>
            </ListView.ItemsSource>
            <ListView.ItemTemplate>
                <DataTemplate>
                    <ViewCell>
                        <Grid Padding="5,10">
                            <Grid.ColumnDefinitions>
                                <ColumnDefinition Width="30"/>
                                <ColumnDefinition Width="*" />
                            </Grid.ColumnDefinitions>
                            <Image Source="{Binding IconSource}" />
                            <Label Grid.Column="1" Text="{Binding Title}" />
                        </Grid>
                    </ViewCell>
                </DataTemplate>
            </ListView.ItemTemplate>
        </ListView>
    </StackLayout>
</ContentPage>

Я очень мало знаю о masterdetailpage, detailpage и т.д ...

Если вы перейдете на страницу "Slaap" с помощью кода, подобного:

Navigation.PushModalAsync(new SlaapPage());

у вас не будет кнопки меню в верхнем левом углу, но я хочу, чтобы она была там.

1 Ответ

0 голосов
/ 14 ноября 2018

Вы должны использовать страницу Detail, чтобы сделать это, и ваша текущая страница должна быть унаследована от MasterDetailPage

public partial class MainPage : MasterDetailPage
{
    public MainPage()
    {
        InitializeComponent();
        Detail = new NavigationPage(new HomePage());
        IsPresented = false; //This is to hide side page after pushing new page 

    }
}

Если вам нравится как выше Detail = new.., то она не вернет вас назадКнопка со стрелкой вверху слева.Если вы хотите, чтобы стрелка назад в Actionbar делала так

Detail.Navigation.PushAsync(new HomePage());

Если вы хотите сделать это с других страниц, делайте это

public void SlaapClicked()
{ 
 Navigation.PushAsync(new SlaapPage());
} 

На SlaapPage скрыть Navigationbar

public SlaapPage()
{
    InitializeComponent();
    NavigationPage.SetHasNavigationBar(this, false);
}

Если вы переезжаете из другого TabbedPage делайте так

private void SlaapPage(object sender, EventArgs e)
{
    //this.Navigation.PushAsync(new SlaapPage());// not showing back button
    //(App.Current.MainPage as MasterDetailPage).Detail=new NavigationPage(new SlaapPage()); //showing full screen page
    (App.Current.MainPage as MasterDetailPage).Detail.Navigation.PushAsync(new SlaapPage()); //working like google play store app, In SlaapPage page SetHasNavigationBar should be false
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...