[英]Xamarin.Forms Navigation.PushAsync not working in ContentView
[英]Xamarin.Forms Navigation.PushAsync Not Working
我有一个 Xamarin.Forms 项目,并且我有一个自定义控件,在点击时应该会打开一个新页面。 不幸的是,当我调用Navigation.PushAsync(...);
时没有任何反应。 . 我已经阅读了无数 StackOverflow 问题( 例如这个问题)和 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 上提出一个新问题是我最后的选择。 任何帮助表示赞赏。
像这样更改您的App.cs
public App()
{
InitializeComponent();
MainPage = new NavigationPage(new MainPage());//Very important add this..
//MainPage = new MainPage(); //not like this
}
我发现了问题。 Keith Rome 带领我浏览了EventDetailsPage
,我注释掉了一行 XAML,这就解决了问题。 该行正在向页面添加自定义控件(与EventControl
无关)。 我不知道控件的定义或其自定义渲染的定义是否导致了奇怪的行为,但删除该行解决了这个问题。
由于不同的原因,同样的问题......
在 Visual Studio 中安装更新(包括 Xamarin)后,我遇到了这个问题。
更新我所有的 nuget 包后,通过以下(显示哪些有更新的第一个命令),我能够解决问题:
Get-Package -updates
Update-Package <package>
我怀疑,删除 AppData\local\Xamarin 文件夹(它似乎充当缓存)并让它重新填充也可以解决问题。
我实现了具有一个输入字符串的 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 nad 我单击一个按钮,该按钮就会执行: await Shell.Current.Navigation.PushAsync(new SentEmailPage());
它会抓住一条消息: Object reference not set to an instance of an object.at Xamarin.Forms.ShellSection.OnPushAsync
这解决了我的问题
Device.InvokeOnMainThreadAsync(() =>
{
Navigation.PushAsync(new CameraPage());
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.