.NET Maui中如何获取父元素宽度,让Line横向铺满?
解决.NET Maui中Line铺满VerticalStackLayout的问题
要让Line从左到右铺满父容器的VerticalStackLayout,别用WidthRequest,改用**ActualWidth**就行——这是控件实际渲染后的真实宽度,而WidthRequest只是请求值,父容器没设置的话根本拿不到有效数据。另外你代码里的AbsoluteLayout.LayoutBounds="70,0"是给AbsoluteLayout用的属性,放在VerticalStackLayout里完全没用,得删掉。
方法一:XAML绑定父容器ActualWidth
直接把Line的X2绑定到父VerticalStackLayout的ActualWidth,同时设置HorizontalOptions确保布局逻辑正确:
<VerticalStackLayout> <Line X1="0" Y1="0" X2="{Binding Source={RelativeSource AncestorType={x:Type VerticalStackLayout}}, Path=ActualWidth}" Y2="0" StrokeLineCap="Round" Stroke="{StaticResource Icon}" StrokeThickness="1" HorizontalOptions="Fill" /> </VerticalStackLayout>
这里用AncestorType指定父容器类型,比TemplatedParent更准确(TemplatedParent是控件模板的父级,你的场景里不适用)。绑定ActualWidth后,父容器宽度变化时Line的X2会自动更新,始终保持铺满状态。
方法二:后台代码动态设置
如果绑定方式不符合需求,也可以通过SizeChanged事件动态获取父容器尺寸:
XAML部分
<VerticalStackLayout> <Line X1="0" Y1="0" Y2="0" StrokeLineCap="Round" Stroke="{StaticResource Icon}" StrokeThickness="1" HorizontalOptions="Fill" SizeChanged="Line_SizeChanged" /> </VerticalStackLayout>
后台代码
private void Line_SizeChanged(object sender, EventArgs e) { if (sender is Line line && line.Parent is VerticalStackLayout parent) { line.X2 = parent.ActualWidth; } }
当Line或父容器尺寸变化时,这个事件会触发,自动把Line的X2设为父容器的实际宽度。
内容的提问来源于stack exchange,提问作者Bongo
相关产品推荐
相关产品推荐

