使用自定义渲染器时,是否应该渲染ContentPage的子节点?

时间:2018-05-11 19:39:01

标签: xamarin.forms

我最近一直在使用Xamarin.Forms,并且通常可以获得Microsoft docs之后的足够信息。但是我现在似乎陷入困境,因为我需要创建一个自定义渲染器,所以如果有人可以提供帮助,我真的很感激。

我阅读了有关创建自定义渲染的文档,也许我错过了我正在寻找的部分,但我无法判断是否作为OnElementChanged的一部分,我还需要渲染元素的所有子元素?

ContentPage可以有一个StackLayout,例如有几个子元素。如果我不需要渲染它们,它们如何渲染/布局?

1 个答案:

答案 0 :(得分:0)

不,您不需要渲染ContentPage的子项。

创建自定义渲染器时,您只扩展Xamarin的渲染器,这意味着您只需添加功能(除非您明确更改某些内容,例如重新定义属性)。

因此,基本上,ContentPage以不同的自定义渲染器渲染/布局子项的方式呈现/布局。

回答你的第二个问题,实际上布局和定位是在没有渲染器的情况下完成的,如Xamarin.Forms Layouts所述。

如果您想深入挖掘,可以尝试通过阅读源代码来了解ContentView(它是更容易的)的定位方式。在这里,TemplatedView(ContentView的基类)为每个孩子调用LayoutChildIntoBoundingRegionTemplatedView

然后LayoutChildIntoBoundingRegion上的这一行调用了视图的Layout方法:Layout

VisualElement.Layout方法只获取矩形并设置视图的边界(Layout Method)。 Bounds setter名为:Setter

好吧,现在你可以继续探索更多的源代码,但我认为你有了这个想法;)

希望它有所帮助!