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期望问题. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |