Xaml Windows应用商店通用应用程序(W8.1&x2B;WP8.1)中的字体大小缩放

Xaml Windows应用商店通用应用程序(W8.1&x2B;WP8.1)中的字体大小缩放,xaml,windows-phone-8.1,windows-8.1,win-universal-app,windows-8.1-universal,Xaml,Windows Phone 8.1,Windows 8.1,Win Universal App,Windows 8.1 Universal,如何在Windows应用商店通用应用程序(W8.1+WP8.1)中缩放文本?基本上,无论使用哪种设备/分辨率,应用程序的外观都应该相同。目前的情况是,除了文本(字体大小)外,版面(基于动态网格的版面)和图像的缩放效果良好 显示的文本在WVGA分辨率(480×800)下看起来不错,但在1080p分辨率下却非常小 我已经读了很多东西,比如 或 但我仍然不知道如何缩放文本以保持可读性,而不考虑显示分辨率/DPI 当然,我可以编写一个类,使用该属性将字体大小转换为适当的值 例如: 带ScaleFac

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

显示的文本在WVGA分辨率(480×800)下看起来不错,但在1080p分辨率下却非常小

我已经读了很多东西,比如 或

但我仍然不知道如何缩放文本以保持可读性,而不考虑显示分辨率/DPI

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

例如:

  • 带ScaleFactor 1x的WVGA上的FontSize 16等于FontSize 16
  • 缩放因子为1.6x的WXGA上的FontSize 16等于FontSize 25,6
  • 720p上的FontSize 16,ScaleFactor 1.5x等于FontSize 24
  • 1080p上的FontSize 16,ScaleFactor为2.25x等于FontSize 36
但我不确定这是否适用于所有情况。有没有更好的办法?我认为这样一个普通的任务可以通过一些内置功能来执行

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


编辑:恐怕我没能把问题说清楚:(左边是WVGA,右边是1080p)

WinRT可以根据显示器的像素密度自动缩放其上运行的所有内容。在Windows8.0中,它曾在100%、140%和180%的范围内扩展。较新的版本可能有更多的比例因子。我不相信你可以选择退出这个缩放


如果您对使用在系统级别上运行的内置扩展不感兴趣,那么您几乎不得不自己做所有事情。您可以通过设置字体大小手动缩放文本,也可以使用转换功能来缩放文本或整个UI。

我为Windows应用商店应用程序所做的是将FontSize属性绑定到页面高度并转换值(在找到适合您的案例的正确值之前,您必须播放一段时间)


它并不完美,但在我找到一个更好的解决方案之前,它运行得相当好

我正在等待答案,我自己也发布了一个相关问题。
作为一个临时解决方案,我使用了一个iValueConverter,它在某些分辨率下工作,但在其他分辨率下不工作

我的意见如下:

class FontSizeConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, string language)
    {
    var display = Helpers.ScreenResolution();
    var height = display.Height;
    var oldFontSize = (int)value;
    if(oldFontSize == null) return;

    // Calculate the new Fontsize based on the designed Fontsize
    // and design display size in Visual Studio designer...
    var newFontSize = (int)Math.Round((oldFontSize / 768.0) * height, 0);
    return newFontSize;
}

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

我希望这有助于…

您的示例图像具有误导性,因为设备的实际大小也会有所不同。告诉您如何设置模拟器以获得更精确的表示

如果你想在每个屏幕上显示完全相同的内容(即,一部6英寸的手机只显示4英寸手机的放大版,而不是显示50%以上的内容),那么就使用一个按钮来扩展你的应用程序。不过,这并不是一个特别好的用户体验。

我发现,当与属性结合使用时,使用该方法效果非常好:

class ScaleConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, string language)
    {
        var resolutionScale = (int)DisplayInformation.GetForCurrentView().ResolutionScale / 100.0;
        var baseValue = int.Parse(parameter as string);
        var scaledValue = baseValue * resolutionScale;
        if (targetType == typeof(GridLength))
            return new GridLength(scaledValue);
        return scaledValue;
    }
}
请注意,如果您使用超过FontSize(因为我也使用它来定义ColumnDefinition.Width),您将需要处理返回正确类型的输出

我的XAML用法如下所示:

<TextBlock Text="string" FontSize="{Binding ElementName=root, Path=ActualHeight, Converter={StaticResource ScaleConverter}, ConverterParameter='30'}" />

为了完成此解决方案,对于每个使用此功能的XAML页面,您需要包括以下内容,用您正在使用的任何类替换SwapChainBackgroundPanel,并正确定义xml命名空间:

<SwapChainBackgroundPanel.Resources>
    <local:ScaleConverter x:Key="ScaleConverter"></local:ScaleConverter>
</SwapChainBackgroundPanel.Resources>


UI可以毫无问题地扩展。字体大小是个问题。如何在W8.1、WP8.1中启用字体大小缩放?WinRT也会自动缩放字体大小。尝试进入“设置->电脑和设备->显示->更多选项”,然后选择“默认/更大”,查看差异。您解决了这个问题吗?我也有同样的问题,找不到任何好的信息。不,我没有。我想知道其他开发者是如何解决这个问题的。也许我们找错人了?看来我也有同样的问题,找不到解决办法。。。
<TextBlock Text="string" FontSize="{Binding ElementName=root, Path=ActualHeight, Converter={StaticResource ScaleConverter}, ConverterParameter='30'}" />
<SwapChainBackgroundPanel.Resources>
    <local:ScaleConverter x:Key="ScaleConverter"></local:ScaleConverter>
</SwapChainBackgroundPanel.Resources>