我最近一直在使用Xamarin.Forms,并且通常可以获得Microsoft docs之后的足够信息。但是我现在似乎陷入困境,因为我需要创建一个自定义渲染器,所以如果有人可以提供帮助,我真的很感激。
我阅读了有关创建自定义渲染的文档,也许我错过了我正在寻找的部分,但我无法判断是否作为OnElementChanged的一部分,我还需要渲染元素的所有子元素?
ContentPage可以有一个StackLayout,例如有几个子元素。如果我不需要渲染它们,它们如何渲染/布局?
答案 0 :(得分:0)
不,您不需要渲染ContentPage的子项。
创建自定义渲染器时,您只扩展Xamarin的渲染器,这意味着您只需添加功能(除非您明确更改某些内容,例如重新定义属性)。
因此,基本上,ContentPage以不同的自定义渲染器渲染/布局子项的方式呈现/布局。
回答你的第二个问题,实际上布局和定位是在没有渲染器的情况下完成的,如Xamarin.Forms Layouts所述。
如果您想深入挖掘,可以尝试通过阅读源代码来了解ContentView(它是更容易的)的定位方式。在这里,TemplatedView(ContentView的基类)为每个孩子调用LayoutChildIntoBoundingRegion
:TemplatedView。
然后LayoutChildIntoBoundingRegion
上的这一行调用了视图的Layout
方法:Layout。
VisualElement.Layout
方法只获取矩形并设置视图的边界(Layout Method)。 Bounds
setter名为:Setter。
好吧,现在你可以继续探索更多的源代码,但我认为你有了这个想法;)
希望它有所帮助!