-1

我想使用 Xamarin 社区工具包弹出窗口显示一个弹出窗口,但我尝试使用 Shell 导航到它我收到错误“System.NullReferenceException Message=Object reference not set to an instance of an object”。

我的弹出窗口的 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();
    }
}

我已经在 AppShell 中注册了路由:

Routing.RegisterRoute(nameof(AddAreaPopup), typeof(AddAreaPopup));

我使用 Shell 对弹出窗口的调用:

private async void tbiNewArea_Clicked(object sender, EventArgs e)
{
    await Shell.Current.GoToAsync("/AddAreaPopup");
}
4

1 回答 1

1

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);关闭这个popupPage。

private async void btnclose_Clicked(object sender, EventArgs e)
{
    await PopupNavigation.Instance.PopAsync(true);
}

有这样的xml:

<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 Navigation 添加支持上提交 Shell Navigation中的一项功能

于 2021-07-05T05:55:06.847 回答