StackLayout两列各占一半空间

时间:2017-10-07 21:48:47

标签: xamarin.forms

我正在尝试制作两个标签,每个标签占父级宽度的50%(StackLayout) 我在两个Label上尝试使用Fill,FillAndExpand,StartAndExpand,但它不起作用:

<StackLayout Orientation="Horizontal">
    <Label Text="AAAAAAAAAAAAAAAAAAAAAAAAA" HorizontalOptions="FillAndExpand" />
    <Label Text="BBBB" HorizontalOptions="FillAndExpand" />
</StackLayout>

3 个答案:

答案 0 :(得分:2)

改为使用Grid

XAML

<Grid>
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="*"/>
        <ColumnDefinition Width="*"/>
    </Grid.ColumnDefinitions>
    <Label Text="AAAAAAAAAAAAAAAAAAAAAAAAA" Grid.Column="0"/>
    <Label Text="BBBB" Grid.Column="1"/>
</Grid>

两个*表示列的宽度相同。如果您希望第一列的次数大于第二列,则可以将第一个宽度更改为2*

您也可以使用EndAndExpand让文字右对齐

答案 1 :(得分:1)

我知道这个问题是去年问的。但我希望我的回答对其他人有帮助。

实际上,您可以使用StackLayout获得中心并切成两半。我喜欢使用StackLayout,因为它具有自己的自动大小调整功能,如果将3 Views放在StackLayout.Children中,则StackLayout会将这3列以相同的精确大小进行划分。

这是我在C#中的操作方式:

Content = new StackLayout{
   Orientation = StackOrientation.Horizontal, //Set the StackLayout to start from left to the right
   HorizontalOptions = LayoutOptions.CenterAndExpand, //Expand the layout to full width and center it
   Children = {
      new Label{
         Text = "Test One"//you may add HorizontalOptions in here to if you want the text on the left or right
      },
      new Label{
         Text = "Text Two"
      }
   }
};

这是我在XAML中执行的操作:

<StackLayout Orientation="Horizontal" HorizontalOptions="CenterAndExpand">
   <Label Text="Test One"></Label>
   <Label Text="Text Two"></Label>
</StackLayout>

我希望这能回答StackLayout上的问题:)

答案 2 :(得分:0)

先前的答案对我不起作用,但是我所做的是: 在StackLayout中设置Horizo​​ntalOptions =“ FillAndExpand”。 设置较大的子项(例如1000)的WidthRequest。 像这样:

<StackLayout Orientation="Horizontal" HorizontalOptions="FillAndExpand">
   <Label WidthRequest="1000" Text="Label 1"/>
   <Label WidthRequest="1000" Text="Label 2"/>
</StackLayout>