Xamarin-自定义渲染器-将Form.View转换为Android.View

Xamarin-自定义渲染器-将Form.View转换为Android.View,xamarin,Xamarin,是否可以从Xamarin.Form.View获取Android.View(以及iOS中的等效视图对象)?我有一个自定义控件,它将依赖项带到Android.View。我正在编写自定义呈现程序,将自定义控件设置为本机视图,但我需要将我的ContentView(作为BindableProperty公开,用xaml初始化)从Portable library转换为Android.view 是的,你可以。我编写了一个扩展,它使用反射来获取底层本机视图: 代码中的本机视图是Android.Views.vie

是否可以从
Xamarin.Form.View
获取
Android.View
(以及
iOS
中的等效视图对象)?我有一个自定义控件,它将依赖项带到
Android.View
。我正在编写自定义呈现程序,将自定义控件设置为本机视图,但我需要将我的
ContentView
(作为
BindableProperty
公开,用xaml初始化)从
Portable library
转换为
Android.view

是的,你可以。我编写了一个扩展,它使用反射来获取底层本机视图:

代码中的本机视图是Android.Views.view类型,视图是Xamarin.Forms.view


同样适用于iOS,只需将其转换到UIView即可。

谢谢-再次内部属性反射将检查该情况。似乎可靠的Xamarin应用程序文档是DotPeek。不幸的是,只有当View已经附加了NativeView(通过SetNativeControl)时,它才起作用-我需要在创建之后将Forms.View转换为Android.View。(RenderFactory.GetRenderer也不工作,因为内部实现存在错误,因为它只返回顶级元素)您可以使用
Platform.GetRenderer(view)
获得渲染器。虽然这似乎只返回顶级元素,但正如您所提到的,子元素就在那里。由于您是在创建Xamarin.Forms视图之后(在实际渲染之前)获得渲染器的,因此可以触发
ContentView
的子树的布局循环。为此,您可以扩展
ViewRenderer
类(
ContentView
的渲染器)并重写
OnAttachedToWindow
方法,在该方法中,您可以使用
Element.layout((VisualElement)Element.Parent.Bounds)触发布局循环。