如何在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 使用自定义基类

Xamarin.Forms中为WebView指定数据来源Source

Xamarin.Forms 中编辑器的边框颜色

如何在 xamarin 中为 android 添加工具栏,因为 ToolbarItem 不适用于 .droid?