2017-10-12 6 views
0

J'ai suivi le guide de James Montemagno sur la façon de créer un rendu personnalisé pour les images rondes dans mon projet partagé Xamarin Forms.Xamarin Forms customrenderer natif

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

(étant une véritable copie du guide, il se sent inutile d'ajouter en fait le code lui-même à mon projet, mais s'il vous plaît commentaire si ce n'est pas le cas)

Il fonctionne sans faille, Cependant, j'ai besoin de changer la couleur de la bordure de cercle dynamiquement avec la pression d'un bouton lorsque l'application est en cours d'exécution.

Mais puisque la couleur du cercle est définie de manière native dans chaque moteur de rendu, je ne sais pas comment je pourrais éventuellement le changer à partir de mon code partagé.

+0

pourquoi ne pas exposer une propriété pour définir la couleur? – Jason

+0

Excellente suggestion et certainement idéal. Mes propres tentatives pour le faire ont été futiles, d'où la question. –

+1

[ImageCirclePlugin] (https://github.com/jamesmontemagno/ImageCirclePlugin) a déjà 'BorderColor' que vous pouvez mettre à jour dans le code partagé. Les moteurs de rendu détecteront la modification et la mettront à jour en conséquence. – Ada

Répondre

1

Peut-être que cet extrait peut aider:

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. 
      } 
     } 
    } 
} 

J'espère que vous avez l'idée principale, vous pouvez créer vos propres propriétés et les bindable accéder à la Renderer autochtone.

Si tout ne se passe pas comme prévu, vous pouvez toujours télécharger le NuGet (qui a tout ce dont vous avez besoin):

https://github.com/jamesmontemagno/ImageCirclePlugin