各ラベルの下に項目のリストがあります。 リスト 'item'の項目を1つの項目の行に入れたいと思います。私は左のラベルと右のエントリを1行にしたい。Xamarinフォームのラベルと1行の入力
私のコードは、これまでのところ、私はそれをテストしていない、うまくいけば、それはあなた:)向きで
各ラベルの下に項目のリストがあります。 リスト 'item'の項目を1つの項目の行に入れたいと思います。私は左のラベルと右のエントリを1行にしたい。Xamarinフォームのラベルと1行の入力
私のコードは、これまでのところ、私はそれをテストしていない、うまくいけば、それはあなた:)向きで
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を作成
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);
}
実装するカスタムコントロールを作成しました。このコントロールを使用すると、どのような方法でもビューを調整することなくコントロールを使用できます。ただ、新しい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;
}
}
}
結果