2016-06-07 13 views
2

Als weiteren Schritt, der versucht, Xamarin zu lernen, arbeite ich an einem Testprojekt zum Zeichnen von Formen in einem Xamarin-Multiplattform-Projekt (vollständiger Github-Code here).ViewRenderer in Xamarin überschreiben

Das Projekt versucht, dieses andere GitHub-Projekt (Link here) zu reproduzieren, aber stattdessen ein neues leeres Xamarin Forms-Projekt zu verwenden. Ich versuche dann, die Teile des ursprünglichen Codes zusammenzusetzen und sie zu verstehen.

Fokussierung auf Android, nach dem Zusammensetzen des Codes werden die Formen nicht korrekt gezeichnet. Ich versuche, das zu beheben, und ich denke, es kommt darauf an:

Ein Breakpoint in OnElementChanged ist im ursprünglichen Projekt erreicht (siehe Quelldatei here). Aber ein Breakpoint in OnElementChanged wird in meinem neuen Projekt nicht erreicht (siehe Quelldatei here).

SharpRenderer ist in beiden .Droid und .iOS-Projekte vorhanden, aber ich kann nicht verstehen, wie der Code miteinander verbunden ist. Ich finde keine sinnvollen Unterschiede zwischen beiden Codes, die mir helfen zu verstehen, was passiert.


SharpRenderer Code, der in einem Fall, aber nicht in dem anderen erreicht:

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

"_Siehe Quelldatei here_" wird irgendwann eine defekte Verbindung sein. Bitte fügen Sie alle erforderlichen und relevanten Informationen direkt in der Frage hinzu. – Mackan

+1

Ich habe den 'ShapeRenderer'-Code aus dem .Droid-Projekt hinzugefügt. Bitte lassen Sie mich wissen, ob ein anderer Code in der Hauptpost notwendig ist (da der Fehler in der Interaktion zwischen den Projekten liegt, so ist es für mich schwierig zu bestimmen, welche Teile notwendig sind und welche Teile nicht). –

+1

Sie fehlen diese Codezeile: '[assembly: ExportRenderer (typeof (ShapeView), typeof (ShapeRenderer))]'. Es geht über den Namensraum hinaus und ist wichtig. 'ExportRenderer'-Warnungen Xamarin.Forms verwendet Ihre Klasse zum Rendern der angegebenen Ansichtsklasse, andernfalls versucht Xamarin.Forms, einen Standard-Renderer zu verwenden. – dylansturg

Antwort

1

Ihr Code fehlt eine wichtige Zeile über dem Renderer Klasse:

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

Das bedeutet, dass Ihre Klasse wird exportiert und dann in Xamarin Forms Framework zum Rendern der ShapeView verwendet.

Zum besseren Verständnis können Sie die Dokumentation here überprüfen.