Xamarin表单样式-支持多种目标类型

时间:2019-07-17 20:38:00

标签: xamarin.forms xamarin.forms-styles

我最近将Xamarin表格更新为4.2之前的最新版本。我遇到的一个值得注意的重大变化是-说我具有以下样式:

<Style x:Key="LightTextLabelStyle" TargetType="Label">
    <Setter Property="FontFamily" Value="{StaticResource TextLight}" />
    <Setter Property="FontSize" Value="15" />
    <Setter Property="TextColor" Value="{StaticResource greyishBrown}" />               
</Style>

在以前的版本中,跨度和标签均支持相同的目标“标签”。就像-以前曾经工作过:

<Label Margin="0,6,0,0">
     <Label.FormattedText>
          <FormattedString>
                <Span Text="{Binding PriceText}" Style="{StaticResource LightTextLabelStyle}" FontSize="13" />
                 <Span Text="{Binding BidAmount, StringFormat=' {0:C0}' TargetNullValue=' Pending'}" Style="{StaticResource LightTextLabelStyle}" FontSize="13" />
          </FormattedString>
      </Label.FormattedText>
</Label>

Span也支持以Label为目标的相同样式。但是现在没有新版本了。

我的问题是: 我们可以同时支持相同样式的Label和Span吗?我们不能同时针对两种样式吗?就像我尝试了以下操作,但无法编译:

<Style x:Key="LightTextLabelStyle" TargetType="Label, Span">
    <Setter Property="FontFamily" Value="{StaticResource TextLight}" />
    <Setter Property="FontSize" Value="15" />
    <Setter Property="TextColor" Value="{StaticResource greyishBrown}" />               
</Style>

请帮助我。我可以复制粘贴样式并制作2种不同的样式;如果有更好的方法?

2 个答案:

答案 0 :(得分:0)

当我在Xamarin.forms 4.2版上构建代码时,我可以重现您的问题,但是在Xamarin.Forms 4.1版上可以正常工作,所以我已向Microsoft支持团队报告了此问题。

但是现在您可以看下面的代码临时解决您的问题。

 <Label Margin="0,6,0,0" Style="{StaticResource LightTextLabelStyle}">
            <Label.FormattedText>
                <FormattedString>
                    <Span FontSize="20" Text="this is test, please take a look!" />
                    <Span FontSize="20" Text="hello world!" />
                </FormattedString>
            </Label.FormattedText>
        </Label>

答案 1 :(得分:0)

到目前为止,最好的解决方案是为Label和Span创建两种不同的样式。较早的Xamarin表单对两者都支持相同的样式,但现在不支持。 所以我最终有了:

<Style x:Key="LightTextLabelStyle" TargetType="Label">
   <Setter Property="FontFamily" Value="{StaticResource TextLight}" />
   <Setter Property="FontSize" Value="15" />
   <Setter Property="TextColor" Value="{StaticResource greyishBrown}" />               
</Style>

<Style x:Key="LightTextSpanStyle" TargetType="Span">
   <Setter Property="FontFamily" Value="{StaticResource TextLight}" />
   <Setter Property="FontSize" Value="15" />
   <Setter Property="TextColor" Value="{StaticResource greyishBrown}" />               
</Style>