Xamarin中StackLayout与子元素设置Horizontal/VerticalOptions的区别
<StackLayout> <Label HorizontalOptions="Center" VerticalOptions="Center" Text="Hello"/> <Slider/> </StackLayout> <StackLayout HorizontalOptions="Center" VerticalOptions="Center" > <Label Text="Hello" /> <Slider /> </StackLayout>
二者核心区别
- 作用范围完全不同
给Label设置HorizontalOptions、VerticalOptions,仅控制Label这一个控件在父StackLayout的可用布局空间内的对齐方式。此时外层StackLayout默认会填满它的父容器(比如页面的整个内容区域),只是内部Label在StackLayout的大空间里居中,StackLayout其余空白区域仍然真实存在,其他子元素(比如示例里的Slider)会按StackLayout默认的布局规则排列,默认会占满StackLayout的整个宽度。
给StackLayout本身设置这两个属性,控制的是整个StackLayout容器在它的父容器内的对齐方式。此时StackLayout的尺寸会收缩到刚好能包裹所有内部子元素的总大小,整个容器块在父空间里居中,内部所有子元素会跟着容器一起居中,不需要单独给子元素设置对齐规则。 - 多子元素场景下的表现差异极大
你可以给两个StackLayout分别加不同的背景色测试:第一段的StackLayout背景会铺满整个页面,只有Label居中显示;第二段的StackLayout背景只会显示为包裹Label和Slider的一小块区域,整体居中在页面中央,示例里的Slider宽度也只会和收缩后的StackLayout宽度一致,不会铺满全屏。 - 扩展和维护成本不同
如果是容器内所有子元素需要整体对齐,直接给StackLayout设置属性只需要配置一次,后续新增子元素也会自动继承容器的位置规则,不需要额外修改;如果只有单个子元素需要特殊对齐,其余子元素要其他排列规则,才适合直接给对应子元素设置对齐属性。
内容的提问来源于stack exchange,提问作者Pulkit Sharma
相关产品推荐
相关产品推荐

