Xamarin.Forms页面正在合并

时间:2016-12-05 16:56:52

标签: xamarin navigation xamarin.forms

当我导航到新页面时,将其添加到堆栈中,如果它不是页面的完整高度,则显示该页面的一部分和前一页面的一部分(如模态)。我有一个Xamarin.Forms应用程序,它使用主详细信息页面。我已升级到Xamarin.Forms Nuget 2.3.3.168,并且是最新的Xamarin版Visual Studio。

我在进入新页面时检查了导航堆栈,一切看起来都正确。我有一个主页面是菜单,详细页面有一个导航页面,堆栈中有更多页面,它们只是部分显示在彼此之上。

我改变的唯一另一件事是我需要通过将App()设置为新的MainPage页面来初始化我的MasterDetail构造函数,因为如果我没有这样做,它就会失败在Android的构造函数中。有什么想法吗?

这是我的App.cs:

   public App()
        {
            InitializeComponent();

            var masterDetailPage = new MasterDetailPage
            {
                Master = new Page() { Title = "Title" },
                Detail = new Page(),
                IsPresented = false
            };

            App.Current.MainPage = masterDetailPage;
        }

然后,当我弄清楚用户是否登录时,我使用此功能重置主详细信息页面:

  public static void SetMainPage(Page newPage)
        {
            var rootPage = new NavigationPage(newPage) { BarBackgroundColor = Color.White};

            _nav.Initialize(rootPage);
            _dialogService.Initialize(rootPage);

            App.Current.MainPage = new MasterDetailPage
            {
               Master = new Menu(),
                Detail = rootPage,
                BindingContext = new MowMagicMobileViewModelBase(),
                IsPresented = false
            };
        }

然后从那里我调用Navigation PushAsync()将页面弹出到堆栈上。

2 个答案:

答案 0 :(得分:1)

哇,实际上我根本没有设置背景颜色。我想如果你没有为页面明确设置它是透明的,除非它从某个地方继承?

答案 1 :(得分:1)

我不知道它是否是解决方案,但我也有masterdetail页面.. 但我的页面就像这样

Master = new MenuPage();// it is a content page 
Detail = new NavigationPage(new HomePage());

试试看

如果你想改变背景我做的那样

public class NavigationPageBase:NavigationPage
{
    public NavigationPageBase (ContentPage c):base(c)
        {
            /*if (c.GetType().Equals(typeof(LoginPage)))
                SetHasNavigationBar(c, false);
            else
                SetHasNavigationBar(c, true);*/
            SetHasNavigationBar(c, true);
            BarBackgroundColor = Styles.toolbarColor;
            BackgroundColor = Styles.bgPageColor;
        }
}

并且对于详细信息页面,您可以使用它,例如

Detail = new NavigationPageBase (new HomePage ());

从您的App()构造函数中,您只需

即可
MainPage = new MyMasterDetailPage();

希望有所帮助