Xamarin如何从android项目打开Xamarin表单页面

本文关键字:Xamarin 表单 项目 android | 更新日期: 2023-09-27 18:02:28

我想从Xamarin Android项目打开Xamarin表单页面。在android项目上,我创建了工具栏项目图像,在那里我调用事件从Xamarin窗体项目打开页面。

这是我的MainActivity.cs工具栏图像项实现:

    public class MainActivity : global::Xamarin.Forms.Platform.Android.FormsApplicationActivity
    {
      private IMenu CurrentMenu { get; set; }
      private ImageView imgSmallC { get; set; }
      public override bool OnCreateOptionsMenu(IMenu menu)
            {
               ActionBar.DisplayOptions = ActionBarDisplayOptions.HomeAsUp | ActionBarDisplayOptions.ShowCustom | ActionBarDisplayOptions.ShowTitle | ActionBarDisplayOptions.ShowHome;  
                LayoutInflater inflater = (LayoutInflater)ActionBar.ThemedContext.GetSystemService(LayoutInflaterService);
                View customActionBarView = inflater.Inflate(Resource.Layout.actionbar_custom_view_done, null);  
                imgSmallC = (ImageView)customActionBarView.FindViewById<ImageView>(Resource.Id.ImgSmallC);
                imgSmallC.Click += (object sender, EventArgs args) =>
                {
                    StartActivity(typeof(MyPopupPage));
                };
                return base.OnCreateOptionsMenu(menu);
            }
}

在StartActivity我调用mypopupage。xaml页面从Xamarin窗体项目,但不幸的是,当我调试项目,我点击工具栏图像,我得到这样一个错误:

系统。参数名:类型不是派生的

Xamarin如何从android项目打开Xamarin表单页面

你不能使用基于Xamarin.FormPage作为Android的Activity,它们是两个完全不同的东西

您可以从Xamarin.Android项目访问Xamarin.Forms Application单例,并将其用于PushModelAsyncPushAsync

示例(使用完整命名空间):

    await Xamarin.Forms.Application.Current.MainPage.Navigation.PushModalAsync(new PushPageFromNative.MyPage());

基于Dependency Service的示例:

接口:

using System;
namespace PushPageFromNative
{
    public interface IShowForm
    {
        void PushPage();
    }
}

Xamarin.Form代码:

var pushFormBtn = new Button
{
    Text = "Push Form",
    VerticalOptions = LayoutOptions.CenterAndExpand,
    HorizontalOptions = LayoutOptions.CenterAndExpand,
};
pushFormBtn.Clicked += (sender, e) =>
{
        DependencyService.Get<IShowForm>().PushPage();
};

Xamarin.Android依赖实现:

async public void PushPage()
{
    // Do some Android specific things... and then push a new Forms' Page
    await Xamarin.Forms.Application.Current.MainPage.Navigation.PushModalAsync(new PushPageFromNative.MyPage());
}