如何在Windows Store Universal App(W8.1 + WP8.1)中缩放文本?基本上,无论使用哪种设备/分辨率,应用程序的外观都应该相同。当前的情况是,布局(基于动态网格的布局)和图像的缩放效果很好,除了文本(字体大小)。

显示的文本对于WVGA分辨率(480×800)看起来不错,但是对于1080p分辨率来说却很小。

我已经读了很多东西
Guidelines for scaling to pixel density
Guidelines for supporting multiple screen sizes

但是无论显示分辨率/ DPI如何,我仍然不知道如何缩放文本以保持可读性。

当然,我可以编写一个使用DisplayInformation.ResolutionScale属性将字体大小转换为适当值的类。

例:

带有ScaleFactor 1x的WVGA上的

  • FontSize 16等于FontSize 16
  • 带有ScaleFactor 1.6x的WXGA上的
  • FontSize 16等于FontSize 25,6
  • 带有ScaleFactor 1.5x的7​​20p上的
  • FontSize 16等于FontSize 24
  • 带有ScaleFactor 2.25x的1080p上的
  • FontSize 16等于FontSize 36

  • 但是我不确定这是否适用于所有情况。有更好的方法吗?我认为可以通过一些内置功能来执行这样的常见任务。

    免责声明:
    这不是(希望)不是“让我用谷歌为您解答”,我发现了大量关于缩放的页面,但它们都覆盖了布局或图像。但是我找不到有关字体大小缩放的任何信息。如果我错过了什么请原谅我。

    编辑:恐怕我无法清楚地表达问题:(左侧为WVGA,右侧为1080p)

    最佳答案

    我为Windows Store应用程序所做的就是将FontSize属性绑定(bind)到页面高度并转换该值(您必须花点时间,直到找到适合您的情况的正确值)。

    <TextBlock Grid.Row="0" Text="Some Text"
    FontSize="{Binding ElementName=pageRoot, Path=ActualHeight,
    Converter={StaticResource PageHeightConverter}, ConverterParameter='BodyFontSize'}" />
    

    这是我的Converter类
        class PageHeightConverter : IValueConverter
    {
        public object Convert(object value, Type targetType, object parameter, string language)
        {
            switch ((string)parameter)
            {
                case "HeroImage":
                    return ((((double)value) * 2) / 3);
                case "TitleFontSize":
                    return (int)((double)value / 40);
                case "BodyFontSize":
                    return (int)((double)value / 60);
                default:
                    return 0;
            }
        }
    }
    

    它不是完美的,但效果很好,直到找到更好的解决方案为止。

    关于xaml - Windows Store Universal App(W8.1 + WP8.1)中的字体大小缩放,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23041883/

    10-10 07:48