Xamarin Forms FontSize 按平台

Xamarin Forms FontSize by Platform

UWP Xamarin Apps 存在一个已知问题,即 Windows 移动设备(不确定桌面设备 Windows 10)的字体大小比在其他设备上渲染的字体大很多两个平台 iOS 和 Android。我找到的修复方法是在 UWP 应用程序中放置一个带有小数点的数字字体大小(例如 24.1 表示大字体大小)。这很好用。我不希望在我的 App.xaml 中定义一个适用于所有平台的静态资源。我试过的,显然是行不通的,如下:

        <OnPlatform x:Key="CustLarge" x:TypeArguments="x:Double">
            <On Platform="iOS|Android">Large</On>
            <On Platform="UWP">24.1</On>
        </OnPlatform>

理论是,在我的 XAML 中,我会简单地将所有大字体编码为 "CustLarge",如下所示:

FontSize = "{StaticResource CustLarge}" />

有没有关于如何在不为我的应用程序中的每个 FontSize 在 OnPlatform 上执行此操作的情况下完成此操作的想法?任何帮助,将不胜感激。

更新:下面是我正在谈论的内容的屏幕截图。 iOS 模拟器适用于 iPhone 6 4.7" 宽。Windows 10 模拟器适用于 10.0.15254.9 5" phone。

您可以看到 Map All 文本比应有的大得多。 (我正在对独立按钮右侧的段控件中的文本进行相对比较。)在这两种情况下,字体大小都设置为 MICRO。

回到我的问题 - 有人知道怎么做吗?

我能够通过创建自定义 ResourceDictionnary 并在构造函数中添加 FontSizes 找到解决方法。

public class SResourceDictionnary : ResourceDictionary
{
    public SResourceDictionnary()
    {
        Add("Micro", new OnPlatform<double>
        {
            Default = Device.GetNamedSize(NamedSize.Micro, typeof(Label)),
            Platforms = { new On
                {
                    Value = 12d,
                    Platform = new List<string>{"UWP"}
                }
            }
        });
        Add("Small", new OnPlatform<double>
        {
            Default = Device.GetNamedSize(NamedSize.Small, typeof(Label)),
            Platforms = { new On
                {
                    Value = 14d,
                    Platform = new List<string>{"UWP"}
                }
            }
        });
        Add("Medium", new OnPlatform<double>
        {
            Default = Device.GetNamedSize(NamedSize.Medium, typeof(Label)),
            Platforms = { new On
                {
                    Value = 18d,
                    Platform = new List<string>{"UWP"}
                }
            }
        });
        Add("Large", new OnPlatform<double>
        {
            Default = Device.GetNamedSize(NamedSize.Large, typeof(Label)),
            Platforms = { new On
                {
                    Value = 20d,
                    Platform = new List<string>{"UWP"}
                }
            }
        });
    }

然后我像这样 App.xaml 合并了字典

<Application.Resources>
    <ResourceDictionary>
        <ResourceDictionary.MergedDictionaries>
            <helpers:SResourceDictionnary></helpers:SResourceDictionnary>
        </ResourceDictionary.MergedDictionaries>
        <Style TargetType="Label">
            <Setter Property="FontSize" Value="{StaticResource Small}" ></Setter>
        </Style>
    </ResourceDictionary>
</Application.Resources>

它允许我使用 FontSize 作为 StaticResource。 唯一的缺点是你在 Xaml

中失去了智能感知