【问题标题】:Use namedSize in onplatform using XAML在使用 XAML 的 onplatform 中使用 namedSize
【发布时间】:2017-01-05 03:31:26
【问题描述】:

我正在尝试为每个使用 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 且不使用过时标记的最佳方法是什么?

【问题讨论】:

    标签: c# visual-studio xaml xamarin.forms


    【解决方案1】:

    类型必须是同一类型。您不能在默认值中同时具有命名大小和双倍。

    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 文件中。

    【讨论】:

    • 能否请您使用转换器提供一些代码?我看不出如何使用这个解决方案。
    • 我已经为我解释的内容添加了一个示例伪代码。
    • 我努力使用 onPlatform 和转换器,但似乎这种方法存在问题。我还不能测试这个...
    • 我在 xaml 中添加了一种没有 OnPlatform 的方法
    猜你喜欢
    • 1970-01-01
    • 2015-04-14
    • 2017-02-09
    • 2017-12-14
    • 2021-06-05
    • 2019-03-25
    • 2017-02-27
    • 2018-05-07
    • 2017-06-05
    相关资源
    最近更新 更多