覆盖Xamarin中的ViewRenderer

时间:2016-06-07 12:38:32

标签: c# xamarin xamarin.forms

作为尝试学习Xamarin的另一个步骤,我正在研究如何在Xamarin多平台项目上绘制形状的测试项目(完整的github代码here)。

该项目正在尝试重现这个其他github项目(链接here),但是使用新的空白Xamarin Forms项目。然后我尝试将原始代码的各个部分组合在一起并尝试理解它们。

专注于Android,将代码放在一起后,形状绘制不正确。我正在努力解决这个问题,我认为这一切都归结为:

原始项目中达到了OnElementChanged中的断点(请参阅源文件here)。但是在我的新项目中未达到OnElementChanged中的断点(请参阅源文件here)。

SharpRenderer存在于.Droid和.iOS项目中,但我无法理解代码是如何互连的。我似乎没有发现两个代码之间有意义的差异,这些代码可以帮助我了解正在发生的事情。

在一个案例中达到的

SharpRenderer代码但在另一个案例中没有:

public class ShapeRenderer : ViewRenderer<ShapeView, Shape>
{
    public ShapeRenderer()
    {
    }

    protected override void OnElementChanged(ElementChangedEventArgs<ShapeView> e)
    {
        base.OnElementChanged(e);

        if (e.OldElement != null || this.Element == null)
            return;

        SetNativeControl(new Shape(Resources.DisplayMetrics.Density, Context)
        {
            ShapeView = Element
        });
    }
}

1 个答案:

答案 0 :(得分:2)

您的代码缺少渲染器类上方的重要行:

[assembly:ExportRenderer (typeof(ShapeView), typeof(ShapeRenderer))]

这意味着您的类将被导出,然后使用b Xamarin Forms Framework来呈现ShapeView

为了更好地理解,您可以查看文档here