如何在Xamarin.Forms的XAML AbsoluteLayout中为元素设置不同对齐方式
你没有用错布局容器,问题出在AbsoluteLayout的布局规则上:AbsoluteLayout的子元素位置、尺寸由AbsoluteLayout.LayoutBounds和AbsoluteLayout.LayoutFlags两个附加属性控制,默认会忽略子元素的HorizontalOptions、VerticalOptions设置,所以你之前给Label加的居中属性不生效。
这里提供两种可行的解决方案:
方案1:继续使用AbsoluteLayout(仅修改属性即可)
给两个子元素加上AbsoluteLayout的专属布局属性即可实现需求:
<Frame BackgroundColor="#2196F3" Padding="24" CornerRadius="0"> <AbsoluteLayout BackgroundColor="Black"> <!-- 图片固定在左上角,尺寸和你定义的一致 --> <Image Source="{local:ImageResource App.Raindrops.png}" WidthRequest="40" HeightRequest="60" AbsoluteLayout.LayoutBounds="0,0,40,60" AbsoluteLayout.LayoutFlags="None"/> <!-- Label撑满整个AbsoluteLayout,内容自然居中 --> <Label Text="Sprinkle" HorizontalOptions="Center" VerticalOptions="Center" TextColor="White" FontSize="36" AbsoluteLayout.LayoutBounds="0,0,1,1" AbsoluteLayout.LayoutFlags="All"/> </AbsoluteLayout> </Frame>
这里Label的LayoutBounds="0,0,1,1"配合LayoutFlags="All",表示Label的位置、宽高都和父容器AbsoluteLayout完全一致,此时再设置内容的水平垂直居中就会生效。
方案2:替换为Grid(写法更简单,无附加属性记忆成本)
如果不需要AbsoluteLayout的绝对定位特性,用单行列的Grid实现需求更直观,符合你原本的属性设置习惯:
<Frame BackgroundColor="#2196F3" Padding="24" CornerRadius="0"> <Grid BackgroundColor="Black"> <Image Source="{local:ImageResource App.Raindrops.png}" WidthRequest="40" HeightRequest="60" HorizontalOptions="Start" VerticalOptions="Center"/> <Label Text="Sprinkle" HorizontalOptions="Center" VerticalOptions="Center" TextColor="White" FontSize="36"/> </Grid> </Frame>
Grid的子元素默认按顺序叠放在同一行同一列,直接给Image设左对齐,Label设居中即可。
内容的提问来源于stack exchange,提问作者BoCoKeith
相关产品推荐
相关产品推荐

