我在导航到MasterDetailPage
时遇到问题。我知道如何使用按钮从xaml
进行操作:
<Button IsVisible="False" Grid.Row="6" x:Name="Start" Text="START"
VerticalOptions="Center" Margin="0,0,0,15" HorizontalOptions="Center"
Command="{Binding Path=NavigateCommand}"
CommandParameter="/MasterDetail/NavigationPage/MainPage" />
但是如何使用后面的代码实现相同的目标?
我正试图这样做:
MasterDetailPage mdet;
Page detpage;
Page mastpage;
mdet = new MasterDetailPage();
detpage = new MainPage();
mastpage = new MasterDetail();
mdet.Master = mastpage;
mdet.Detail = detpage;
App.Current.MainPage = mdet;
但是结果是:
System.InvalidOperationException:在将MasterDetailPage添加到容器之前,必须先设置Master和Detail
编辑。
抱歉,我不清楚地写了这个问题。为了阐明我需要达到的目标:
我有一个页面,该页面在应用程序启动时显示。在OnAppearing方法中,我正在检查一些条件。如果不符合要求,则将使用带有Command="{Binding Path=NavigateCommand}"
和CommandParameter="/MasterDetail/NavigationPage/MainPage"
的Button显示初始页面。但是如果满足条件,我想直接进入MainPage(实现与单击提到的按钮但未单击的相同操作)
编辑2。
我有两个页面,MasterDetail是MasterDetailPage的类型,具有在xaml中定义的母版部分,而MainPage是ContentPage,并作为详细信息部分添加到MasterDetail中。当我添加代码Navigation.PushModalAsync(new MasterDetail());
时,什么都没有发生。要做出任何回应,我需要执行Navigation.PushModalAsync(new MainPage());
或
var MaDe = new MasterDetail();
MaDe.Detail = new MainPage();
Navigation.PushModalAsync(MaDe);
但是在显示详细信息页面后的两个选项中,某些按钮均不起作用。我有4个按钮(实际上是4个带有TapGestureRecognizers的网格),它们的代码相似:
private async void TapImage_Tapped1(object sender, System.EventArgs e)
{
if (App.Current.Properties.ContainsKey("Boxisconf1"))
{
var masterDetail = App.Current.MainPage as MasterDetailPage;
if (masterDetail == null || masterDetail.Detail == null)
return;
var navigationPage = masterDetail.Detail as NavigationPage;
if (navigationPage == null)
{
masterDetail.Detail = new NavigationPage(new Box1());
masterDetail.IsPresented = false;
return;
}
var NavPage = new Box1();
NavPage.Title = "Part 1";
switch (isInsideButOutside1)
{
case 0:
NavPage.Children.Add(new Letter1 {});
NavPage.Children.Add(new Parcel1 {});
NavPage.Children.Add(new Exit1 { });
break;
(...)
}
await navigationPage.Navigation.PushAsync(NavPage);
navigationPage.Navigation.RemovePage(navigationPage.Navigation.NavigationStack[navigationPage.Navigation.NavigationStack.Count - 2]);
masterDetail.IsPresented = false;
}
else
{
await Navigation.PushAsync(new Configure());
}
}
并且在App.Current.Properties.ContainsKey(“ Boxisconf1”)为true的情况下,如果(masterDetail为null)并且如果第一个条件为false,则该函数在下一个返回;我得到一个异常:{{1 }}
答案 0 :(得分:0)
这是代码。
var btn=new Button();
btn.CommandParameter = new MasterDetailPage1();
btn.Command = new Command<MasterDetailPage1>((key) =>
{
Navigation.PushAsync(key);
});
如果您不想在app.xaml中新建导航。
您可以只使用以下代码。
var btn=new Button();
btn.CommandParameter = new MasterDetailPage1();
btn.Command = new Command<MasterDetailPage1>((key) =>
{
// Navigation.PushAsync(key);
Navigation.PushModalAsync(key);
});
此处正在运行GIF。
修改 只需判断标志,如果符合条件就可以导航到其他页面。如果不符合条件,请显示一个按钮。
public partial class MainPage : ContentPage
{
public MainPage()
{
InitializeComponent();
bool IsMeet = true ;
if (IsMeet)
{
Navigation.PushModalAsync(new MasterDetailPage1());
}
else
{
var btn = new Button();
btn.CommandParameter = new MasterDetailPage1();
btn.Command = new Command<MasterDetailPage1>((key) =>
{
// Navigation.PushAsync(key);
Navigation.PushModalAsync(key);
});
// btn.Clicked += Btn_Clicked;
Content = btn;
}
}