2017-10-12 8 views
0

Ich habe die Anleitung von James Montemagno zur Erstellung eines benutzerdefinierten Renderers für runde Bilder in meinem Xamarin Forms Shared Project gelesen.Xamarin Forms nativer custyrenderer

https://blog.xamarin.com/elegant-circle-images-in-xamarin-forms/

(eine originalgetreue Kopie der Führung ist es überflüssig fühlt, um tatsächlich den Code selbst zu meinem Projekt hinzufügen, aber bitte kommentieren, wenn dies nicht der Fall ist)

Es funktioniert einwandfrei, Allerdings muss ich die Farbe der Kreisgrenze dynamisch mit einem Knopfdruck ändern, wenn die App läuft.

Da jedoch die Farbe des Kreises in jedem Renderer nativ eingestellt ist, bin ich nicht sicher, wie ich es möglicherweise von meinem geteilten Code ändern könnte.

+0

warum nicht eine Eigenschaft setzt die Farbe zu setzen? – Jason

+0

Ausgezeichneter Vorschlag und definitiv ideal. Meine eigenen Versuche waren sinnlos, daher die Frage. –

+1

[ImageCirclePlugin] (https://github.com/jamesmontemagno/ImageCirclePlugin) hat bereits eine 'BorderColor', die Sie im geteilten Code aktualisieren können. Die Renderer werden die Änderung erkennen und entsprechend aktualisieren. – Ada

Antwort

1

Vielleicht kann dieser Schnipsel helfen:

public class CircleImage : Image 
{ 

    public static readonly BindableProperty CurvedBackgroundColorProperty = 
     BindableProperty.Create(
      nameof(CurvedBackgroundColor), 
      typeof(Color), 
      typeof(CurvedCornersLabel), 
      Color.Default); 

    public Color CurvedBackgroundColor 
    { 
     get { return (Color)GetValue(CurvedBackgroundColorProperty); } 
     set { SetValue(CurvedBackgroundColorProperty, value); } 
    } 

} 

//Android/iOS 

[assembly: ExportRenderer(typeof(CircleImage), typeof(CircleImageRenderer))] 
namespace SchedulingTool.iOS.Renderers 
{ 
    public class CircleImageRenderer : ImageRenderer 
    { 
     protected override void OnElementChanged(ElementChangedEventArgs<Image> e) 
     { 
      base.OnElementChanged(e); 

      if (e.NewElement != null) 
      { 
       var xfViewReference = (CircleImage)Element; 
       //Here you can reference xfViewReference.CurvedBackgroundColor to assign what ever is binded. 
      } 
     } 
    } 
} 

Ich hoffe, dass Sie die Hauptidee erhalten, können Sie Ihre eigenen bindbare Eigenschaften erstellen und sie auf der Renderer Mutter zugreifen.

Wenn alles nicht wie erwartet gehen, können Sie immer die NuGet downloaden (das ist alles, was Sie brauchen):

https://github.com/jamesmontemagno/ImageCirclePlugin