【问题标题】:Xamarin how to open xamarin forms page from android project?Xamarin 如何从 android 项目打开 xamarin 表单页面?
【发布时间】:2016-12-22 09:09:20
【问题描述】:

我想从 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 中,我从 Xamarin 表单项目中调用 MyPopupPage.xaml 页面,但不幸的是,当我在调试项目并单击工具栏图像时,出现这样的错误:

System.ArgumentException:类型参数名称:类型未派生 来自 java 类型。

【问题讨论】:

标签: c# xamarin xamarin.android xamarin.forms android-toolbar


【解决方案1】:

您不能将基于PageXamarin.Form 用作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());
}

【讨论】:

  • 我想从 android Activity 中打开一个 Xamarin Froms 页面,而不是单击任何按钮。那么应该在哪里写你的“基于 Xamarin.Forms 的代码”呢?
  • 它有效,谢谢。另一个问题是它是在没有导航栏的情况下打开的,那么内容页面可以用导航栏打开吗?
  • 不错。表单视图上的单个元素(例如文本标签)有什么相似之处吗?
  • @GGleGrand 不确定您的意思?你想做什么?
  • 谢谢,您的回答 (stackoverflow.com/questions/37621140/…) 成功了。
猜你喜欢
  • 1970-01-01
  • 2016-09-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-11-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多