2017-03-18 20 views
3

各ラベルの下に項目のリストがあります。 リスト 'item'の項目を1つの項目の行に入れたいと思います。私は左のラベルと右のエントリを1行にしたい。Xamarinフォームのラベルと1行の入力

私のコードは、これまでのところ、私はそれをテストしていない、うまくいけば、それはあなた:)向きで

答えて

0
StackLayout layout = new StackLayout(); 

for(int i = 0; i < item.Count; i++) 
{ 
    StackLayout innerLayout = new StackLayout 
    { 
     Orientation = StackOrientation.Horizontal 
    } 
    var label = new Label 
    { 
     Text = item[i] 
    }; 
    var entry = new Entry(); 
    innerLayout.Children.Add(label); 
    innerLayout.Children.Add(entry); 
    layout.Children.Add(innerLayout); 
} 

=水平は正しい選択です。アイテムのリストがある場合は、ListViewを使用することもお勧めします。水平Stacklayoutを持つViewCellでDataTemplateを作成

3

StackLayoutを助ける

StackLayout layout = new StackLayout(); 

     for(int i = 0; i < item.Count; i++) 
     { 
      var label = new Label 
      { 
       Text = item[i] 
      }; 
      var entry = new Entry(); 
      Grid stackLayout = new Grid 
      { 
       HorizontalOptions = LayoutOptions.CenterAndExpand, 
       Children = { 
        label, 
        entry 
       }, 

      }; 

      layout.Children.Add(stackLayout); 
     } 
1

実装するカスタムコントロールを作成しました。このコントロールを使用すると、どのような方法でもビューを調整することなくコントロールを使用できます。ただ、新しいEntryTExtOneLineオブジェクトを作成し、StackLayoutに追加するコントロール
を実装する方法

カスタムコントロール

using Xamarin.Forms; 

namespace StackOverflowHelp 
{ 
    /// <summary> 
    /// Custom <see cref="Grid"/> containing <see cref="Label"/> next to <see cref="Entry"/> 
    /// </summary> 
    public class EntryTextOneLine : Grid 
    { 
     /// <summary> 
     /// <see cref="Style"/> for <seealso cref="_text"/> 
     /// </summary> 
     private static Style _textStyle = new Style(typeof(Label)) 
     { 
      Setters = 
      { 
       new Setter { Property = Label.TextColorProperty, Value = Color.Black }, 
       new Setter { Property = Label.FontAttributesProperty, Value = FontAttributes.Bold }, 
       new Setter { Property = HorizontalOptionsProperty, Value = LayoutOptions.FillAndExpand }, 
       new Setter { Property = VerticalOptionsProperty, Value = LayoutOptions.CenterAndExpand }, 
       new Setter { Property = Label.HorizontalTextAlignmentProperty, Value = TextAlignment.End } 
      } 
     }; 
     /// <summary> 
     /// label next to entry 
     /// </summary> 
     private Label _text = new Label 
     { 
      Style = _textStyle 
     }; 
     /// <summary> 
     /// <see cref="Entry"/> 
     /// </summary> 
     private Entry _entry = new Entry 
     { 
      VerticalOptions = LayoutOptions.CenterAndExpand, 
      HorizontalOptions = LayoutOptions.FillAndExpand 
     }; 

     /// <summary> 
     /// <see cref="Label.Text"/> next to <see cref="_entry"/> 
     /// </summary> 
     public string EntryText { 
      get { 
       return _text.Text; 
      } 
      set { 
       _text.Text = value; 
      } 
     } 
     /// <summary> 
     /// Custom <see cref="Grid"/> containing <see cref="Label"/> next to <see cref="Entry"/> 
     /// </summary> 
     public EntryTextOneLine() 
     { 
      ColumnDefinitions.Add(new ColumnDefinition { Width = new GridLength(0.3, GridUnitType.Star) }); 
      ColumnDefinitions.Add(new ColumnDefinition { Width = new GridLength(0.7, GridUnitType.Star) }); 

      RowDefinitions.Add(new RowDefinition { Height = GridLength.Star }); 

      Children.Add(_text, 0, 0); 
      Children.Add(_entry, 1, 0); 
     } 
    } 
} 

using Xamarin.Forms; 

namespace StackOverflowHelp 
{ 
    public class EntryStackOverflow : ContentPage 
    { 
     private StackLayout _stack = new StackLayout(); 


     public EntryStackOverflow() 
     { 

      var list = new[] 
      { 
       new { title = "testing title" }, 
       new {title = "another title"}, 
       new {title = "text wraps down to the next line if too long"}, 
       new {title = "you get the point"} 
      }; 



      foreach(var n in list) 
      { 
       var control = new EntryTextOneLine 
       { 
        EntryText = n.title 
       }; 

       _stack.Children.Add(control); 
      } 

      Content = _stack; 
     } 
    } 
} 

結果

enter image description here

関連する問題