作为尝试学习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
});
}
}
答案 0 :(得分:2)
您的代码缺少渲染器类上方的重要行:
[assembly:ExportRenderer (typeof(ShapeView), typeof(ShapeRenderer))]
这意味着您的类将被导出,然后使用b Xamarin Forms Framework来呈现ShapeView
。
为了更好地理解,您可以查看文档here。