微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

c# – 如何使用Xamarin.Form控件和本地控件在同一页面上

我想在我的本机 Android页面控件中使用Xamarin.Form控件.在我的Android本机页面中有没有办法在我的Native Android Fragment或LinearLayout中加载Xamarin.Form页面

根据Xamarin可能.但是我找不到如何实现这一点.

解决方法

有几件事情正在讨论中,所以对我来说是如此:

图片片段,从我所了解的:

"Not only are Xamarin.Forms pages mixable with custom screens" ...

这就像@Stephane提到允许应用程序使用本机屏幕以及Xamarin.Forms屏幕.每个平台存根页面都可以在应用程序中的任何一点引入一个共享的Xamarin.Forms页面.您不必使用Xamarin.Forms导航堆栈.

"but you can embed custom views built directly against Xamarin.IOS and Xamarin.Android into Xamarin.Forms pages."

这是@Sten所提到的,如果您创建平台特定的ContentRenderers,您可以将任何种类的本地控件渲染到现有的Xamarin.Forms页面中,方法是将此常见视图传递给每个平台渲染器.

所以,例如,如果你有一个视图:

public class MyView : ContentView
 {
     // Create some bindable properties here that can be used in your platform specific renderer,// i.e. displayText etc.
 }

您可以在Xamarin.Forms页面定义中使用上述内容,然后创建将被调用以呈现内容的平台特定渲染器.

在这些平台内,您可以在每个平台上使用本机控件,具体的内容渲染器类.

例如在ContentRenderer中,对于OnElementChanged事件,您可以对WindowsPhone执行以下操作:

protected override void OnElementChanged(Xamarin.Forms.Platform.WinPhone.ElementChangedEventArgs<MyView> e)
 {
     base.onElementChanged(e);
     ...
     System.Windows.Controls.TextBox objplatformSpecificTextBox = new System.Windows.Controls.TextBox();
     ... 
     ...

然而,@Gulshan真正想要的是,我相信是将一个本地页面与Xamarin.Forms内容呈现在已经存在的本地页面中的特定点的中心.

它有点颠倒了,但在思考中,这仍然是可行的:

为了实现这一点,您需要激发页面生成一个临时的新页面.

例如在WindowsPhone中,您将通过以下方式执行此操作: –

PhoneApplicationPage objInnerPage_Temp = new PhoneApplicationPage();
        UIElement objInnerContent = App.GetMainPage().ConvertPagetoUIElement(objInnerPage_Temp);

在平台上特定的页面.

然后,您可以将渲染的内容注入到平台上适当的本机容器,即网格.

更新1: –

==========

虽然它在WindowsPhone上很容易做到这一点,但似乎这不可能在Android中尝试类似的事情.

Android页面创建非常锁定,即您无法访问其内部在AndroidActivity中使用的画布和/或布局的专用字段.

如果可能,那么您可以重新使用此操作,并将所呈现的内容与WindowsPhone平台的解决方案相似.

此外,Platform类也被标记为内部,防止另一种方式生成渲染的内容.

一个希望,我正在考虑从Fragment实现一个活动进入它,这可以很好的工作 – 但是,这里的问题是,Xamarin.Forms的实现是期待ActionBar可用,它是而不是,如果它不可用,则它们不会检查if方案是否允许执行继续,因此它会抛出异常以阻止页面内容生成.

因此看起来不太可能吗?除非他们打开AndroidActivity中的布局/画布字段或者解决ActionBar期望问题.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐