"控制与#34;自定义渲染器和效果中的属性对于布局是空的

时间:2016-10-24 22:11:32

标签: xamarin.forms

当我尝试为任何布局类编写自定义渲染器时," Control"属性显示为null。没关系,因为渲染器已经是本机控件的包装器,但在创建效果时会出现问题。所以我不能使用Effects对布局类进行任何自定义,因为未分配Control属性。这是一个错误吗?

3 个答案:

答案 0 :(得分:3)

PlatformEffect类有另一个名为Container的属性,当Control为空时,该属性也可用于效果,例如在布局。

答案 1 :(得分:0)

所以我看到了与原帖相同的问题。

我在iOS上继承了PlatformEffect<UIView, UILabel>。我在调试时控件为null。我将效果更改为继承自PlatformEffect,然后将控件转换为((UILabel)Control),一切都开始有效。

返回空控制

MultilineTruncateLabelEffect : PlatformEffect<UIView, UILabel>
{
    protected override void OnAttached()
    {
        var effect = (MultilineEffect) Element.Effects.FirstOrDefault(e => e is MultilineEffect);
            if (effect != null)
            {
                Control.Lines = effect.Lines;
            }
    }
}

工作正常

public class MultilineTruncateLabelEffect : PlatformEffect
{
    protected override void OnAttached()
    {
        var effect = (MultilineEffect) Element.Effects.FirstOrDefault(e => e is MultilineEffect);
        if (effect != null)
        {
            ((UILabel)Control).Lines = effect.Lines;
        }
    }
}

答案 2 :(得分:-1)

布局没有渲染器,并且由于它们没有渲染器或本机视图(即没有Control),因此您无法使用Effect修改任何内容。