我有一个Xamarin.Forms项目,我有一个自定义控件,在点击时应该打开一个新页面。不幸的是,当我拨打Navigation.PushAsync(...);
时没有任何反应。我已经阅读了无数的StackOverflow问题(such as this one)和Xamarin论坛主题并完成了几次Google搜索,但没有一个解决方案似乎可以解决我的问题。
ContentView
,与所有Xamarin.Forms视图一样
做。src
是一个包含一些数据点的自定义类
由此控件和EventDetailsPage
使用。PushAsync()
的调用什么也没做。NavigationPage
(使其成为myNavigationPage.Navigation.PushAsync(new EventDetailsPage(src));
)。Page
并使用它与上述点类似。我的对手的构造函数:
public EventControl() {
InitializeComponent();
GestureRecognizers.Add(new TapGestureRecognizer() {
Command = new Command(() => Navigation.PushAsync(new EventDetailsPage(src)))
});
}
通常情况下,在我尝试解决问题时,在StackOverflow上提出新问题是我的最后一招。任何帮助表示赞赏。
答案 0 :(得分:8)
像这样更改 App.cs
public App()
{
InitializeComponent();
MainPage = new NavigationPage(new MainPage());//Very important add this..
//MainPage = new MainPage(); //not like this
}
答案 1 :(得分:1)
我发现了问题。 Keith Rome lead me查看EventDetailsPage
,我注释掉了一行XAML,解决了这个问题。该行正在向页面添加自定义控件(与EventControl
无关)。我不知道控件的定义或其自定义渲染的定义是否导致奇怪的行为,但删除该行解决了这个问题。
答案 2 :(得分:0)
出于不同的原因同样的问题...
在Visual Studio中安装更新后,我遇到了这个问题,包括Xamarin。
在更新了所有我的nuget包后,通过以下内容(第一个显示哪些包含更新的命令),我能够解决问题:
Get-Package -updates
Update-Package <package>
我怀疑,删除AppData \ local \ Xamarin文件夹(它似乎充当缓存)并让它重新填充也可以解决问题。
答案 3 :(得分:0)
我实现了具有一个输入字符串的AppShell类,以设置正确的页面:
public partial class AppShell : Shell
{
public AppShell(string startUpPageString = null)
{
InitializeComponent();
Page startUpPage;
if (startUpPageString == nameof(SignUpPage))
{
startUpPage = new SignUpPage();
}
else if (startUpPageString == nameof(LoginPinPage))
{
startUpPage = new LoginPinPage();
}
else
{
startUpPage = new SignUpPage();
}
ShellSection shellSection = new ShellSection();
shellSection.Items.Add(new ShellContent() { Content = startUpPage });
CurrentItem = shellSection;
RegisterRoutes();
}
private void RegisterRoutes()
{
...removed for clarity
}
}
其中,在我的XAML中,我添加了一些通过GoToAsync(postlogin)
方法调用的标签(登录后部分):
<Shell xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:login="clr-namespace:XXX.Views.Login"
xmlns:postlogin ="clr-namespace:XXX.XXX.Views.PostLogin"
x:Class="XXX.AppShell"
FlyoutBehavior="Disabled">
<ShellItem Route="postlogin">
<ShellSection Route="activity_section" Title="Activity" Icon="Activity_Menu_Icon.png">
<ShellContent Route="page1"
Title="Page1"
Icon="Pag1.png"
ContentTemplate="{DataTemplate postlogin:Page1}" />
</ShellSection>
<ShellContent Route="page2"
Title="Page2"
Icon="Pag2.png"
ContentTemplate="{DataTemplate postlogin:Page2}" />
</ShellSection>
<ShellContent Route="page3"
Title="Page3"
Icon="Page3.png"
ContentTemplate="{DataTemplate postlogin:Page3}" />
</ShellSection>
<ShellContent Route="page4"
Title="Page4"
Icon="Pag4.png"
ContentTemplate="{DataTemplate postlogin:Page4}" />
</ShellSection>
</ShellItem>
<FlyoutItem Route="others"
Title="OTHERS"
FlyoutDisplayOptions="AsMultipleItems">
<Tab>
<ShellContent Route="cats"
Title="Cats"
Icon="next_7.png"
/>
<ShellContent Route="dogs"
Title="Dogs"
Icon="next_7.png"
/>
</Tab>
</FlyoutItem>
</Shell>
因此,我的问题如下:例如,进入SignUpPage后,我单击一个按钮,然后该按钮执行:
await Shell.Current.Navigation.PushAsync(new SentEmailPage());
听起来很吸引人:Object reference not set to an instance of an object.at Xamarin.Forms.ShellSection.OnPushAsync