2017-10-03 6 views
1

J'ai déclaré un rendu personnalisé pour iOS (et Android - fonctionne bien).Xamarin Renderer personnalisé pour le bouton (iOS)

Le moteur de rendu personnalisé définit principalement la couleur d'arrière-plan et la couleur du texte.

La définition de la couleur du texte fonctionne correctement pour les états activé et désactivé, mais j'ai des problèmes pour définir la couleur d'arrière-plan du bouton dans différents états.

Je n'ai pas trouvé de documentation pour les rendus personnalisés de Xamarin, et c'est un bogue connu avec Xamarin que je ne peux pas obtenir d'intellisense pour les classes iOS dans Visual Studio, jusqu'ici j'ai utilisé ce ressources pouvez trouver sur le sujet.

public class MyButtonRenderer : ButtonRenderer 
    { 
     protected override void OnElementChanged(ElementChangedEventArgs<Button> e) 
     { 
      base.OnElementChanged(e); 

      if (Control != null) 
      { 
       Control.BackgroundColor= UIColor.FromRGB(235, 115, 17); 

       Control.SetTitleColor(UIColor.FromRGB(255, 255, 255),UIControlState.Normal); 
       Control.SetTitleColor(UIColor.FromRGB(0, 0, 0),UIControlState.Disabled); 
      } 
     } 
    } 

Je voudrais être en mesure de changer la couleur de fond autre chose que ce que je me suis fixé - si les boutons UIControlState est Disabled.

Dans cette image, les boutons utilisent le moteur de rendu personnalisé. Le bouton du haut est désactivé et le bas est activé. Comme vous pouvez le deviner, j'aimerais rendre le bouton désactivé gris.

The top button is disabled, bottom enabled.

Je suis convaincu que cela doit être assez simple, mais le manque de documentation et sans problème IntelliSense, entravent mes efforts sont.

Répondre

3

Vous pouvez remplacer le OnElementPropertyChanged pour suivre les modifications apportées aux propriétés.

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

    .... 

    UpdateBackground(); 
} 

protected override void OnElementPropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e) 
{ 
    base.OnElementPropertyChanged(sender, e); 

    if (e.PropertyName == VisualElement.IsEnabledProperty.PropertyName) 
     UpdateBackground(); 
} 

void UpdateBackground() 
{ 
    if (Control == null || Element == null) 
     return; 

    if (Element.IsEnabled) 
     Control.BackgroundColor = ..; 
    else 
     Control.BackgroundColor = ..; 
}