20

Windows ストア ユニバーサル アプリ (W8.1 + WP8.1) でテキストを拡大縮小するにはどうすればよいですか? 基本的に、使用するデバイスや解像度に関係なく、アプリは同じように見えるはずです。現在の状況では、レイアウト (動的グリッド ベースのレイアウト) と画像は、テキスト (フォント サイズ) を除いて適切にスケーリングされます。

表示されるテキストは、WVGA 解像度 (480 × 800) ではきれいに見えますが、1080p 解像度では信じられないほど小さいです。

ピクセル密度にスケーリングするためのガイドラインや 複数の画面サイズをサポートするためのガイドラインなど、すでに多くのものを読んでい ます

しかし、ディスプレイの解像度/ DPIに関係なく、テキストを読みやすくする方法はまだわかりません。

もちろん、DisplayInformation.ResolutionScaleプロパティを使用してフォント サイズを適切な値に変換するクラスを作成することもできます。

例:

  • ScaleFactor 1x の WVGA で FontSize 16 は FontSize 16 に等しい
  • ScaleFactor 1.6x の WXGA で FontSize 16 は、FontSize 25,6 に等しい
  • ScaleFactor 1.5x を使用した 720p の FontSize 16 は、FontSize 24 に等しい
  • ScaleFactor 2.25x を使用した 1080p の FontSize 16 は、FontSize 36 に等しい

しかし、これがすべてのシナリオで機能するかどうかはわかりません。そうするより良い方法はありますか?このような一般的なタスクは、機能を組み込むことで実行できると思いました。

免責事項:これは(うまくいけば)「質問のためにグーグルで検索させてください」ではありません。スケーリングに関するページをたくさん見つけましたが、それらはすべてレイアウトまたは画像をカバーしています。しかし、フォントサイズのスケーリングについては何も見つかりませんでした。私が何かを逃した場合は、ご容赦ください。


編集:残念ながら、問題を明確に表現できませんでした: (左側が WVGA、右側が 1080p) WVGA 対 1080p

4

5 に答える 5

8

Windows ストア アプリで行ったことは、FontSize プロパティをページの高さにバインドし、値を変換することでした (ケースに適した値が見つかるまで、少し試す必要があります)。

<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;
        }
    }
}

完璧ではありませんが、適切な解決策が見つかるまではうまく機能します。

于 2014-06-29T20:15:39.503 に答える
2

WinRT は、その上で実行されているすべてのものを自動的にスケーリングでき、ディスプレイのピクセル密度に基づいてこれを行います。Windows 8.0 では、100%、140%、および 180% でスケーリングされていました。新しいバージョンでは、さらに多くの倍率が含まれている可能性があります。このスケーリングをオプトアウトできるとは思えません。

システム レベルで動作するビルトイン スケーリングの使用に関心がない場合は、ほぼすべてを自分で行う必要があります。フォント サイズを設定してテキストを手動で拡大縮小することも、変換機能を使用してテキストまたは UI 全体を拡大縮小することもできます。

于 2014-04-14T10:17:40.920 に答える
1

デバイスの実際のサイズも異なるため、サンプル画像は誤解を招きます。このブログ投稿では、より正確な表現のためにエミュレーターをセットアップする方法について説明しています。

すべての画面でまったく同じコンテンツが必要な場合 (つまり、6 インチの携帯電話は 4 インチの携帯電話の 50% 多いコンテンツを表示するのではなく、拡大バージョンを表示するだけです)、 を使用しViewBoxてアプリをスケーリングします。ただし、これは特に優れたユーザー エクスペリエンスではありません。

于 2015-01-06T00:05:01.470 に答える
0

これに対する回答を待っており、関連する質問を自分で投稿しました。
暫定的な解決策として iValueConverter を使用しましたが、これは特定の解像度では機能しますが、他の解像度では機能しません。

私の 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();
}}

これが役立つことを願っています...

于 2014-11-29T16:10:23.533 に答える