2017-09-16 1 views
0

Ich möchte 2 Etiketten oder 2 Fotos in die Schaltfläche hinzufügen. Ich möchte vertikale Optionen und horizontale Optionen festlegen. Wie kann ich tun? Ich arbeite gerade an IOS. Es wäre besser, wenn Sie mir Ios Renderer sagen.Wie man zusammengesetzte Taste auf xamarin Formen tut?

Gefällt mir dies;

enter image description here

Vielen Dank allen.

Antwort

0

Sie können einen Button über Custom Renderer anpassen. Erstellen Sie Ihren Button-Renderer und fügen Sie verwandte BindableProperty hinzu. Dann können Sie den Text der Etiketten in Xaml festlegen.

Hier ist mein Code als Beispiel:

  1. MyButton.cs in PCL, stellen Sie die BindableProperty hier:

    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 in iOS-Plattform, fügen Sie die Etiketten zu MyButton und setzen ihre Frames:

    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. Stellen Sie die Texte der bu tton die Etiketten bei MainPage.xaml in PCL:

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

    Es läuft wie folgt aus:

    enter image description here

Auch für Hinzufügen von Fotos finden Sie müssen nur die UILabels zu UIImageViews ersetzen.

+0

Danke für Ihre gute Antwort. Aber ich habe ein Problem. Ich kann keine horizontalen Optionen und vertikalen Optionen festlegen. Und Button-Effekt ist nicht sichtbar. Button Klick Ereignis funktioniert aber Effekt funktioniert nicht. Wie kann ich die horizontalen, vertikalen Optionen und die Sichtbarkeit der Schaltfläche einstellen? –

+0

@KadirAlan, "Ich kann keine horizontalen Optionen und vertikalen Optionen festlegen" - Sie können die zugehörige BindableProperty für sie hinzufügen. Und legen Sie die Position nach Rahmen oder Einschränkung fest. Mein Code setzt die Rahmen für die Beschriftungen so, dass sie sich in der horizontalen und vertikalen Mitte der Schaltfläche befinden. Sie können sie anpassen. Der Standard-Button-Effekt ist für den Titel des Buttons. Für diese Schaltfläche ist kein Titel festgelegt. –

+0

@ KadirAlan, Oder Sie können ein benutzerdefiniertes Hintergrundbild für den unterschiedlichen Status der Schaltfläche festlegen. 'btn.SetBackgroundImage (aImage, UIControlState.Highlighted);' und 'btn.SetBackgroundImage (bImage, UIControlState.Normal);' –

0

Sie können ein Raster erstellen, eine Schaltfläche hinzufügen, die alle Zeilen und Spalten belegt, und dann die gewünschten Ansichten (die beiden Bezeichnungen in diesem Fall) mit InputTransparent = true hinzufügen.

Das ist es, hoffe es hilft!