Xamarin Forms Styles - 支持多种目标类型
Xamarin Forms Styles - Support multiple target types
我最近更新到最新的 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"。就像 - 这之前有效:
<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>
针对 Label 的相同样式在 Span 上也得到了支持。但是现在在新版本中它没有。
我的问题是:
我们可以同时支持具有相同样式的 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 种不同的样式;有没有更好的办法?
当我在 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>
到目前为止,最好的解决方案是为标签和跨度创建两种不同的样式。早期的 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>
我最近更新到最新的 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"。就像 - 这之前有效:
<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>
针对 Label 的相同样式在 Span 上也得到了支持。但是现在在新版本中它没有。
我的问题是: 我们可以同时支持具有相同样式的 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 种不同的样式;有没有更好的办法?
当我在 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>
到目前为止,最好的解决方案是为标签和跨度创建两种不同的样式。早期的 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>