如何在Xamarin.forms中复制标签的viewbox行为?

时间:2018-07-15 17:27:36

标签: c# xaml xamarin xamarin.forms

我想将WPF应用程序重写为Xamarin.forms,但无法将标签缩放到最大可用空间。

在WPF中,我可以简单地做到:

<Viewbox Grid.ColumnSpan="2" Grid.RowSpan="3"
         HorizontalAlignment="Center" VerticalAlignment="Center">
    <Label Width="auto" Height="auto"
           HorizontalAlignment="Center" VerticalAlignment="Center"
           Content="ABCD"/>
</Viewbox>

我尝试过类似的操作,但是它只会扩展标签的背景而不是文本

<Label Grid.ColumnSpan="2" Grid.RowSpan="3"
       HorizontalOptions="FillAndExpand"
       VerticalOptions="FillAndExpand"
       Text="ABCD"
/>

xamarin.forms是否提供与WPF的视图框内标签相似的行为?

2 个答案:

答案 0 :(得分:1)

Xamarin中没有标准的Viewbox,因此简短的答案是:否。

我发现至少有一个第三方实现:https://forums.xamarin.com/discussion/92662/viewbox-implementation-for-xamarin-forms,但由于我没有使用过,因此无法担保。

答案 1 :(得分:0)

我想出了一个非常幼稚的解决方案:

XAML:

<BoxView x:Name="measureViewBox"
         Grid.RowSpan="3" Grid.ColumnSpan="2"
         HorizontalOptions="FillAndExpand" VerticalOptions="FillAndExpand"
         Opacity="0"/>
<Label x:Name="myLabel" 
       Grid.RowSpan="3" Grid.ColumnSpan="2"
       HorizontalTextAlignment="Center" VerticalTextAlignment="Center"
       HorizontalOptions="FillAndExpand" VerticalOptions="FillAndExpand"
       Text="ABCD">

后面的代码:

private void ContentView_SizeChanged(object sender, EventArgs e)
{
    double fontSize = measureViewBox.Width;
    myLabel.FontSize = fontSize;
    SizeRequest measurement = myLabel.Measure(double.PositiveInfinity, double.PositiveInfinity);
    while (measurement.Request.Width >= measureViewBox.Width)
    {
        fontSize -= 2;
        myLabel.FontSize = fontSize;
        measurement = myLabel.Measure(double.PositiveInfinity, double.PositiveInfinity);
    }
}

当我在UWP中调整窗口大小时,它非常滞后,但至少目前为止,它可以完成工作。我将在以后尝试改善此问题,因此任何建议将不胜感激。