当我导航到新页面时,将其添加到堆栈中,如果它不是页面的完整高度,则显示该页面的一部分和前一页面的一部分(如模态)。我有一个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()
将页面弹出到堆栈上。
答案 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();
希望有所帮助