如何在Xamarin表单中从自定义渲染器导航到内容页面

时间:2018-08-13 10:13:32

标签: c# xamarin.forms xamarin.ios xamarin.android

我想从自定义渲染器导航到xamarin表单内容页面。我正在使用自定义渲染器来创建地图,当我单击标记时,我需要重定向到它的详细信息页面。我使用此链接来开发地图-https://docs.microsoft.com/en-us/xamarin/xamarin-forms/app-fundamentals/custom-renderer/map/customized-pin

void OnInfoWindowClick (object sender, GoogleMap.InfoWindowClickEventArgs e)
  {
   var customPin = GetCustomPin (e.Marker);
     if (customPin == null) 
     {
     throw new Exception ("Custom pin not found");
     }
   else
   {
    // navigate to details page , that is  a content page in xamarin forms.
   }
}

这是我的自定义图钉和详细信息

enter image description here

1 个答案:

答案 0 :(得分:0)

您有几种选择:

邮件中心

在您的App.xaml.cs的构造函数中注册

MessagingCenter.Subscribe<App, CustomModelClass>(App.Current, "OpenPage", (snd, arg) =>
        {
            Device.BeginInvokeOnMainThread(() => { 
                MainPage.Navigation.PushAsync(new ContentPage(arg));
            });
        });

在渲染器中,然后调用

MessagingCenter.Send<App, CustomModelClass>(App.Current as App, "OpenPage", model);

请注意,CustomModelClass可以是您定义的任何类,可以是复杂模型,也可以只是字符串。

App.xaml.cs中的

静态属性

在App.xaml.cs中创建属性

    public NavigationPage NavigationPage
    {
        get
        {
            if (MainPage == null)
                return null;

            if (MainPage is MasterDetailPage && (MainPage as MasterDetailPage).Detail is NavigationPage)
                return (MainPage as MasterDetailPage).Detail as NavigationPage;
            else if (MainPage is NavigationPage)
                return (MainPage as NavigationPage);
        }
    }

但是,您可能还必须确保主页始终包含正确的页面。

但是,现在您可以在自定义渲染器中调用:

(App.Current as App).NavigationPage.Navigation.PushAsync(new ContentPage());

或您要推送的任何页面。