我正在使用BoxView完成我的应用程序中的下划线。我有几个非常短的标签-诸如“是”或“否”之类的文本。这是其中一个带有BoxView的标签的XAML下划线:

<StackLayout Orientation="Vertical" Grid.Row="5" Grid.Column="1" Margin="0,4,0,4" HorizontalOptions="Start" BackgroundColor="Purple" MinimumWidthRequest="1">
    <Label x:Name="txtUseMetric" TextColor="Blue" FontSize="Small" Text="{Binding UseMetricText}" BackgroundColor="Yellow">
    <Label.GestureRecognizers>
        <TapGestureRecognizer Tapped="Value_Tapped" CommandParameter="usemetric" />
    </Label.GestureRecognizers>
    </Label>
    <BoxView BackgroundColor="Green" HeightRequest="1" MinimumWidthRequest="1" />
</StackLayout>


我的问题是BoxView的宽度始终超出我尝试覆盖App.Xaml文件中的MinWidthRequest的文本,如下所示:

<Style TargetType="BoxView">
    <Setter Property="MinimumWidthRequest" Value="3" />
</Style>


但这没有效果。我提供了屏幕截图供您查看。

仅供参考-黄色是标签的宽度。您不会看到任何紫色(StackLayout的背景色),因为StackLayout和Label的宽度相同。第二个屏幕快照显示了如果删除BoxView,屏幕的外观-即Label和StackLayout的大小正确。

对于如何解决这个问题,有任何的建议吗?

BoxView太长的屏幕截图,使标签和StackLayout太长
xamarin.forms - Xamarin在用于下划线时形成BoxView宽度太长-LMLPHP

屏幕截图删除了BoxView,并且正确调整了标签和堆栈布局的大小
xamarin.forms - Xamarin在用于下划线时形成BoxView宽度太长-LMLPHP

最佳答案

请注意默认的HorizontalOptions并且Label源自View:

除非另有说明,否则默认值为LayoutOptions.Fill。

在“使用指标”标签上添加HorizontalOptions="Start"

<Label x:Name="txtUseMetric" TextColor="Blue" FontSize="Small"
       Text="{Binding UseMetricText}" BackgroundColor="Yellow"
       HorizontalOptions="Start">
<BoxView BackgroundColor="Green" HeightRequest="1"
         WidthRequest="{Binding Path=Width, Source={x:Reference txtUseMetric}"
         HorizontalOptions="Start"/>

10-08 03:38