2017-09-16 10 views
0

ボタンに2つのラベルまたは2つの写真を追加したいと思います。私は垂直オプションと水平オプションを設定する必要があります。どうすればいいですか?私は現在、イオスに取り組んでいます。 あなたが私のレンダラを教えてくれればいいです。xamarinフォームのコンポジットボタンの操作方法は?

このように、

enter image description here

おかげでみんな。

答えて

0

Custom Rendererでボタンをカスタマイズできます。ボタンレンダラーを作成し、関連するBindablePropertyを追加します。次に、Xamlでラベルのテキストを設定することができます。

ここでは一例として、私のコードです:PCLで

  1. MyButton.cs、ここBindablePropertyを設定:IOSプラットフォームにおける

    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を、MyButtonというにラベルを追加し、フレームを設定する:

    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. buのテキストを設定するPCLでMainPage.xamlをでttonのラベル:

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

    それは次のように実行します:

    enter image description here

はまた、写真を追加するために、あなただけのUIImageViewsにUILabelsを交換する必要があります。

+0

お返事ありがとうございます。しかし、私は問題があります。水平オプションと垂直オプションは設定できません。ボタン効果は表示されません。ボタンのクリックイベントは機能しますが、効果は機能しません。どのように水平、垂直オプションとボタンの有効性を設定することができますか? –

+0

@ KadirAlan、 "水平オプションと垂直オプションを設定できません" - 関連するBindablePropertyを追加できます。フレームまたは拘束によって位置を設定します。私のコードは、ラベルのフレームをボタンの水平と垂直の中心に置くようにフレームを設定します。それらをカスタマイズすることができます。デフォルトのボタン効果は、ボタンのタイトルです。このボタンにはタイトルは設定されていません。 –

+0

@ KadirAlan、またはボタンのさまざまな状態にカスタム背景画像を設定できます。 'btn.SetBackgroundImage(aImage、UIControlState.Highlighted);'と 'btn.SetBackgroundImage(bImage、UIControlState.Normal); ' –

0

グリッドを作成し、すべての行と列を占めるボタンを追加して、希望のビュー(この場合は2つのラベル)をInputTransparent = trueで追加できます。

それは、それが助けてくれることです!

関連する問題