如何在Xamarin.Forms中为StackLayout正确创建自定义渲染器?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在Xamarin.Forms中为StackLayout正确创建自定义渲染器?相关的知识,希望对你有一定的参考价值。
我正在尝试创建StackLayout
自定义渲染器,根据documentation,基本渲染器是ViewRenderer
。
所以我最终在ios上看到了这个:
public class MyCustomStackLayout : StackLayout
public class MyCustomStackLayoutRenderer : ViewRenderer<MyCustomStackLayout, UIView>
protected override void OnElementChanged(ElementChangedEventArgs<ExportableStackLayout> e)
base.OnElementChanged(e);
// some customizations here that don't mess with BackgroundColor at all
// removing all customizations doesn't fix the issue either.
而且我在XAML中像这样使用它:
<custom:MyCustomStackLayout BackgroundColor="Green">
</custom:MyCustomStackLayout>
[几乎一切都工作正常,渲染器已正确注册,并且其行为类似于StackLayout
,甚至允许更改Orientation
,但由于某些原因,我的BackgroundColor
中设置的MyCustomStackLayout
被忽略,因此它总是透明的。
我无法确切找到原始StackLayout
的渲染器在代码库中的注册位置,因为它没有与其他渲染器一起在AssemblyInfo中注册,所以我不确定100%是否在做这里正确的事情。
我是否缺少使BackgroundColor
被忽略的内容?我是否为StackLayout
使用了正确的渲染器?有人知道它在哪里确切注册吗?
答案
似乎是ViewRenderer的设计问题。您可以在渲染器中添加以下代码。
protected override void SetBackgroundColor(Color color)
base.SetBackgroundColor(color);
if (NativeView == null)
return;
if (color != Color.Default)
NativeView.BackgroundColor = color.ToUIColor();
以上是关于如何在Xamarin.Forms中为StackLayout正确创建自定义渲染器?的主要内容,如果未能解决你的问题,请参考以下文章
如何在Xamarin.Forms中为StackLayout正确创建自定义渲染器?
如何使用 C++ 非托管库在 Visual Studio 2017 中为 Xamarin.Forms 设置项目?
在 Xamarin.Forms 中为 ContentPage 使用自定义基类