Looking for xamarin.forms Answers? Try Ask4KnowledgeBase
Looking for xamarin.forms Keywords? Try Ask4Keywords

Xamarin.FormsXamarin相対レイアウト


備考

この場合のForceLayoutの使用法

ラベルとボタンのサイズは、その内部のテキストに応じて変わります。したがって、レイアウトに子を追加すると、そのサイズは幅と高さの両方で0のままです。例えば:

relativeLayout.Children.Add(label,
    Constraint.RelativeToParent(parent => label.Width));

上記の式は、現在幅が0なので0を返します。この問題を回避するには、 SizeChangedイベントをリスンする必要があります。サイズが変更されたら、レイアウトを強制的に再描画する必要があります。

label.SizeChanged += (s, e) => relativeLayout.ForceLayout();

BoxViewのようなビューの場合、これは不要です。インスタンス化時にサイズを定義できるからです。他の点は、どちらの場合でもレイアウトに幅や高さを追加するときに、その幅と高さを制約として定義できるということです。例えば:

relativeLayout.Children.Add(label,
    Constraint.Constant(0),
    Constraint.Constant(0),
    //Width constraint
    Constraint.Constant(30),
    //Height constraint
    Constraint.Constant(40));

これにより、ポイント0、0にラベルが追加されます。ラベルの幅と高さは30と40になります。ただし、テキストが長すぎる場合は、一部が表示されないことがあります。ラベルの高さがある場合、または高い場合は、labelのLineBreakModeプロパティを使用できます。テキストをラップすることができます。 LineBreakMode列挙型には多くのオプションがあります。

Xamarin相対レイアウト 関連する例