使用StartAndExpand
或EndAndExpand
似乎并没有真正扩展StackLayout
中的元素。即使有更多可用空间,如蓝色区域所示。只有FillAndExpand
有效。
代码如下:
<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:ios="clr-namespace:Xamarin.Forms.PlatformConfiguration.iOSSpecific;assembly=Xamarin.Forms.Core"
xmlns:local="clr-namespace:App6"
x:Class="App6.MainPage"
ios:Page.UseSafeArea="True">
<StackLayout BackgroundColor="Blue"
HeightRequest="100"
Orientation="Horizontal"
Spacing="0"
VerticalOptions="Start">
<Label BackgroundColor="Red"
HorizontalOptions="Start"
Text="Hi" />
<StackLayout BackgroundColor="Salmon"
HorizontalOptions="EndAndExpand"
Orientation="Vertical">
<BoxView BackgroundColor="Red"
HeightRequest="30"
HorizontalOptions="End"
VerticalOptions="Center"
WidthRequest="30" />
</StackLayout>
</StackLayout>
</ContentPage>
这就是我得到的:
最常见的结果是对子项FillAndExpand
使用StackLayout
时,后面是EndAndExpand
,后者没有扩展,最后是StartAndExpand
,也没有扩展。
如果父元素具有更多空间,是否不应该扩展该元素?如果是,为什么StartAndExpand
和EndAndExpand
不起作用?
注意:仅在Android上使用Xamarin.Forms 3.4.0.1008975版进行了测试。
答案 0 :(得分:2)
原因::在stackLayout中添加标签时,stackLayout不会使子视图适合该大小。
解决方案:
将标签放入网格中。请参考以下代码。
例如:如果要将标签“ Hi”设置为屏幕宽度的一半
<Grid BackgroundColor="Blue" >
<Grid.RowDefinitions>
<RowDefinition Height="100" />
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<Label HeightRequest="100" Grid.Row="0" Grid.Column="0" Text="Hi" BackgroundColor="Red" />
<BoxView Grid.Row="0" Grid.Column="1" BackgroundColor="Red"
HeightRequest="30"
HorizontalOptions="End"
VerticalOptions="Center"
WidthRequest="30"/>
</Grid>
答案 1 :(得分:1)
请参阅@AndroDevil注释,该空间实际上是在StackLayout的子元素之间分配的,但是它们无法填充它,除非其布局选项包含Fill
。它的工作方式与FlexLayout在选项之间的空间差不多。
我刚刚在StackLayout中添加了另一个元素,现在更清楚了。
代码如下:
<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:ios="clr-namespace:Xamarin.Forms.PlatformConfiguration.iOSSpecific;assembly=Xamarin.Forms.Core"
xmlns:local="clr-namespace:App6"
x:Class="App6.MainPage"
ios:Page.UseSafeArea="True">
<StackLayout BackgroundColor="Blue"
HeightRequest="100"
Orientation="Horizontal"
Spacing="0"
VerticalOptions="Start">
<Label BackgroundColor="Red"
HorizontalOptions="Start"
Text="Hi" />
<Label BackgroundColor="Red"
HorizontalOptions="EndAndExpand"
Text="Bye" />
<StackLayout BackgroundColor="Salmon"
HorizontalOptions="EndAndExpand"
Orientation="Vertical">
<BoxView BackgroundColor="Red"
HeightRequest="30"
HorizontalOptions="End"
VerticalOptions="Center"
WidthRequest="30" />
</StackLayout>
</StackLayout>
</ContentPage>
这就是我得到的:
所以Expand
的含义如下:
StartAndExpand
:给我更多空间,但请把我放在左边。CenterAndExpand
:给我更多空间,但请把我放在中间。EndAndExpand
:给我更多空间,但请把我放在右边。FillAndExpand
:请给我更多空间,我要填满。