根据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期望问题.