2017-09-16 3 views

Répondre

0

Vous pouvez personnaliser un bouton via Custom Renderer. Créez votre rendu de bouton et ajoutez connexes BindableProperty. Ensuite, vous pouvez définir le texte des étiquettes dans Xaml.

Voici mon code comme exemple:

  1. MyButton.cs dans PCL, réglez le BindableProperty ici:

    public class MyButton : Button 
    { 
        public static readonly BindableProperty LabelOneTextProperty = BindableProperty.Create("LabelOneText", typeof(string), typeof(MyButton), defaultBindingMode: BindingMode.TwoWay); 
        public static readonly BindableProperty LabelTwoTextProperty = BindableProperty.Create("LabelTwoText", typeof(string), typeof(MyButton), defaultBindingMode: BindingMode.TwoWay); 
    
    
        public string LabelOneText 
        { 
         get { return (string)GetValue(LabelOneTextProperty); } 
         set { SetValue(LabelOneTextProperty, value); } 
        } 
    
        public string LabelTwoText 
        { 
         get { return (string)GetValue(LabelTwoTextProperty); } 
         set { SetValue(LabelTwoTextProperty, value); } 
        } 
    } 
    
  2. MyButtonRenderer.cs dans la plate-forme iOS, ajouter les étiquettes à MyButton et définir leurs cadres:

    class MyButtonRenderer: ButtonRenderer 
    { 
    
        UILabel labelOne; 
        UILabel labelTwo; 
    
        public override void LayoutSubviews() 
        { 
         base.LayoutSubviews(); 
         nfloat height = Control.Frame.Size.Height; 
         nfloat width = Control.Frame.Size.Width; 
    
         if (labelOne!=null) 
          labelOne.Frame = new CGRect(0, 0, width, height/2); 
    
         if (labelTwo != null) 
          labelTwo.Frame = new CGRect(0, height/2, width, height/2); 
    
        } 
        protected override void OnElementChanged(ElementChangedEventArgs<Button> e) 
        { 
         base.OnElementChanged(e); 
    
         if (Control != null) 
         { 
          var button = e.NewElement as MyButton; 
    
          labelOne = new UILabel(); 
          labelOne.Text = button.LabelOneText; 
          labelOne.TextAlignment = UITextAlignment.Center; 
    
          labelTwo = new UILabel(); 
          labelTwo.Text = button.LabelTwoText; 
          labelTwo.TextAlignment = UITextAlignment.Center; 
    
          this.AddSubview(labelOne); 
          this.AddSubview(labelTwo); 
         } 
        } 
    } 
    
  3. définir les textes du bu Les étiquettes de tton à MainPage.xaml dans PCL:

    <ContentPage.Content> 
        <StackLayout> 
         <local:MyButton LabelOneText="OneText" LabelTwoText="TwoText" BackgroundColor="Red"/> 
        </StackLayout> 
    </ContentPage.Content> 
    

    Il fonctionne comme ceci:

    enter image description here

En outre, pour l'ajout de photos, il vous suffit de remplacer les UILabels à UIImageViews.

+0

Merci pour votre bonne réponse. Mais j'ai un problème. Je ne peux pas définir les options horizontales et les options verticales. Et l'effet de bouton n'est pas visible. L'événement de clic de bouton fonctionne mais l'effet ne fonctionne pas. Comment puis-je définir les options horizontales et verticales et la visibilité de l'effet du bouton? –

+0

@KadirAlan, "Je ne peux pas définir les options horizontales et les options verticales" - vous pouvez ajouter la BindableProperty correspondante pour ces options. Et définissez la position par image ou contrainte. Mon code définit les cadres pour les étiquettes pour les laisser au centre horizontal et vertical du bouton. Vous pouvez les personnaliser. L'effet de bouton par défaut est pour le titre du bouton. Il n'y a pas de jeu de titres pour ce bouton. –

+0

@ KadirAlan, Ou vous pouvez définir une image de fond personnalisée pour l'état différent du bouton. 'btn.SetBackgroundImage (aImage, UIControlState.Highlighted);' et 'btn.SetBackgroundImage (bImage, UIControlState.Normal);' –

0

Vous pouvez créer une grille, ajouter un bouton occupant toutes les lignes et colonnes, puis ajouter les vues souhaitées (les deux étiquettes dans ce cas) avec InputTransparent = true.

C'est tout, espérons que ça aide!