Windows 8.1通用应用程序字体缩放,显示分辨率不断变化

时间:2014-11-25 20:03:51

标签: windows fonts resolution win-universal-app

我的应用UI在不同的屏幕分辨率之间进行了很大的扩展,除了根本不进行缩放的字体大小。因此,例如,当我设置在768x1366看起来正确的字体大小并在1080x1920处显示应用程序时,UI重新缩放,但所有文本最终都很小。同样的效果也适用于Windows Phone 8等设备。 我尝试使用主题字体大小值并更改为Segoe UI字体,但没有区别。我可以编写一个iValueConverter来根据显示分辨率更改fontsize,但这对于做一些肯定应该由框架处理的事情来说是一种笨拙的方法吗?

有没有人可以回答如何控制字体缩放?

1 个答案:

答案 0 :(得分:1)

这是我目前正在使用的一个不完美的解决方案:

目前我已经使用了一个使用以下逻辑的FontSize的iValueConverter:

(FontSize,分辨率为1366x768分辨率)/(屏幕高度为1366x768分辨率)x(运行时屏幕高度)=> var newFontSize =(int)Math.Round((oldFontSize / 768.0)* screenHeight,0);

我正在使用VS的设计视图分辨率或1366x768。在我的笔记本电脑上以1920x1080分辨率运行应用程序使用iValueConverter放大它们的字体。今天,我发现在朋友的PC上测试应用程序的分辨率介于1366x768到1920x1080之间的字体太大了。所以看来,考虑到其他显示分辨率的不同缩放或者iValueConverter方法不正确,我的逻辑需要更复杂!

有没有人有更好的解决方案?

这是完整的代码:

internal class SizeConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, string language)
    {
        // Get the current ResolutionScale...
        var resolutionScale = (int)DisplayInformation.GetForCurrentView().ResolutionScale / 100.0;

        // Get the scaling due to difference between VS Design and Runtime resolutions...
        var designVsRuntimeScale = Helpers.ScreenResolution().Width / 1366;

        // Combine scaling factors...
        var totalScale = resolutionScale * designVsRuntimeScale;

        if (value is double)
        {
            return System.Convert.ToDouble(value) * totalScale;
        }

        if (value is int || value is uint)
        {
            return System.Convert.ToInt32(Math.Floor(System.Convert.ToInt32(value) * totalScale));
        }

        if (parameter != null)
        {
            return System.Convert.ToInt32(Math.Floor(System.Convert.ToInt32(parameter) * totalScale));
        }

        throw new Exception("Resource not found");
    }

    public object ConvertBack(object value, Type targetType, object parameter, string language)
    {
        throw new NotImplementedException();
    }
}