Shell.Current.GoToAsync 到 xct:Popup 导致错误 System.NullReferenceException
Shell.Current.GoToAsync to xct:Popup results in error System.NullReferenceException
我想用 Xamarin 社区工具包弹出窗口显示一个弹出窗口,但我尝试使用 Shell 导航到它我收到错误消息“System.NullReferenceException Message=Object reference not set to an一个对象的实例。"
我的弹出窗口 xaml:
<?xml version="1.0" encoding="utf-8" ?>
<xct:Popup
xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:xct="http://xamarin.com/schemas/2020/toolkit"
x:Class="Restuco_Tables.Views.AddAreaPopup"
Shell.PresentationMode="ModalAnimated"
Size="300, 300">
<StackLayout>
<Label Text="This is a Popup!" VerticalOptions="CenterAndExpand" HorizontalOptions="CenterAndExpand"/>
</StackLayout>
</xct:Popup>
代码隐藏:
[XamlCompilation(XamlCompilationOptions.Compile)]
public partial class AddAreaPopup : Popup
{
public AddAreaPopup()
{
InitializeComponent();
}
}
我在App中注册了RoutingShell:
Routing.RegisterRoute(nameof(AddAreaPopup), typeof(AddAreaPopup));
我使用 Shell 调用弹出窗口:
private async void tbiNewArea_Clicked(object sender, EventArgs e)
{
await Shell.Current.GoToAsync("/AddAreaPopup");
}
从Shell Navigation可以看出Shell.Current.GoToAsync
需要ShellNavigationState类型的数据,显然弹出页面不是,所以才会出现这个错误。
如果您使用一个简单的 ContentPage,没有问题。
所以我建议你可以使用Rg.Plugins.Popup Popup Pages,然后使用await PopupNavigation.Instance.PushAsync(new Page2());
从Shell.
中的一个ContentPage转到PopupPage
private async void btn1_Clicked(object sender, EventArgs e)
{
await PopupNavigation.Instance.PushAsync(new Page2());
//await Shell.Current.GoToAsync("page2");
}
最后,使用await PopupNavigation.Instance.PopAsync(true);
关闭这个弹出页面。
private async void btnclose_Clicked(object sender, EventArgs e)
{
await PopupNavigation.Instance.PopAsync(true);
}
有xaml这样的:
<popup:PopupPage
x:Class="shellsample.Views.Page2"
xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:popup="clr-namespace:Rg.Plugins.Popup.Pages;assembly=Rg.Plugins.Popup">
<StackLayout>
<Frame
BackgroundColor="Red"
BorderColor="Black"
CornerRadius="30">
<StackLayout>
<Label
HorizontalOptions="CenterAndExpand"
Text="Welcome to Xamarin.Forms!"
VerticalOptions="CenterAndExpand" />
<Button
x:Name="btnclose"
Clicked="btnclose_Clicked"
Text="close" />
</StackLayout>
</Frame>
</StackLayout>
</popup:PopupPage>
您还需要在 MainActivity.cs OnCreate 方法中初始化 Rg.Plugins.Popup.Popup。
Rg.Plugins.Popup.Popup.Init(this);
的 shell 导航中提交一项功能
我想用 Xamarin 社区工具包弹出窗口显示一个弹出窗口,但我尝试使用 Shell 导航到它我收到错误消息“System.NullReferenceException Message=Object reference not set to an一个对象的实例。"
我的弹出窗口 xaml:
<?xml version="1.0" encoding="utf-8" ?>
<xct:Popup
xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:xct="http://xamarin.com/schemas/2020/toolkit"
x:Class="Restuco_Tables.Views.AddAreaPopup"
Shell.PresentationMode="ModalAnimated"
Size="300, 300">
<StackLayout>
<Label Text="This is a Popup!" VerticalOptions="CenterAndExpand" HorizontalOptions="CenterAndExpand"/>
</StackLayout>
</xct:Popup>
代码隐藏:
[XamlCompilation(XamlCompilationOptions.Compile)]
public partial class AddAreaPopup : Popup
{
public AddAreaPopup()
{
InitializeComponent();
}
}
我在App中注册了RoutingShell:
Routing.RegisterRoute(nameof(AddAreaPopup), typeof(AddAreaPopup));
我使用 Shell 调用弹出窗口:
private async void tbiNewArea_Clicked(object sender, EventArgs e)
{
await Shell.Current.GoToAsync("/AddAreaPopup");
}
从Shell Navigation可以看出Shell.Current.GoToAsync
需要ShellNavigationState类型的数据,显然弹出页面不是,所以才会出现这个错误。
如果您使用一个简单的 ContentPage,没有问题。
所以我建议你可以使用Rg.Plugins.Popup Popup Pages,然后使用await PopupNavigation.Instance.PushAsync(new Page2());
从Shell.
private async void btn1_Clicked(object sender, EventArgs e)
{
await PopupNavigation.Instance.PushAsync(new Page2());
//await Shell.Current.GoToAsync("page2");
}
最后,使用await PopupNavigation.Instance.PopAsync(true);
关闭这个弹出页面。
private async void btnclose_Clicked(object sender, EventArgs e)
{
await PopupNavigation.Instance.PopAsync(true);
}
有xaml这样的:
<popup:PopupPage
x:Class="shellsample.Views.Page2"
xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:popup="clr-namespace:Rg.Plugins.Popup.Pages;assembly=Rg.Plugins.Popup">
<StackLayout>
<Frame
BackgroundColor="Red"
BorderColor="Black"
CornerRadius="30">
<StackLayout>
<Label
HorizontalOptions="CenterAndExpand"
Text="Welcome to Xamarin.Forms!"
VerticalOptions="CenterAndExpand" />
<Button
x:Name="btnclose"
Clicked="btnclose_Clicked"
Text="close" />
</StackLayout>
</Frame>
</StackLayout>
</popup:PopupPage>
您还需要在 MainActivity.cs OnCreate 方法中初始化 Rg.Plugins.Popup.Popup。
Rg.Plugins.Popup.Popup.Init(this);
的 shell 导航中提交一项功能