我正在尝试使用特定大小的每个平台的标签字体,只使用XAML。这段代码工作正常:
<Label x:Name="DescricaoLabel"
Grid.Row="1"
Grid.Column="0"
HorizontalTextAlignment="Start"
Text="{Binding Descricao}"
TextColor="#426d76">
<Label.Font>
<OnPlatform x:TypeArguments="Font"
Android="14"
iOS="Micro" />
</Label.Font>
</Label>
但是,标记Label.Font
被标记为已过时。我试过这个:
<Label.FontSize>
<OnPlatform x:TypeArguments="x:Double"
Android="14"
iOS="Micro" />
</Label.FontSize>
但是使用标签Label.FontSize
我无法编译,因为使用了NamedSize'Micro'。
在XAML中使用double和NamedSize并且不使用过时标记的最佳方法是什么?
答案 0 :(得分:2)
类型必须属于同一类型。在默认值中,您不能同时具有命名大小和双精度。
NamedSize通过内置的静态转换器工作。您可以编写自己的转换器,也可以将它们作为字符串然后转换。或者使用带参数的转换器并指定值和类型。
默认值不会处理您尝试实现的方案。
public class StringToSizeConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
double size;
if(double.TryParse(value.ToString, out size))
{
//this is a double
return size;
}
// its a named size, so convert the named size to enum
NamedSize namedSize;
if (Enum.TryParse(value.ToString, true, out namedSize))
{
return Device.GetNamedSize(NamedSize.Default, typeof(Label));
}
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
您可以在下面详细了解转换器:
另一种替代方法是在app.cs或app.xaml.cs中定义一个命名标签样式,并设置字体大小并在XAML中使用该样式。在这种情况下,您不需要在XAML中使用OnPlatform,它将在您的CS文件中。