Xamarin.forms: [バグ] ExportFontがUWPで機能しない

作成日 2020年04月12日  ·  55コメント  ·  ソース: xamarin/Xamarin.Forms

説明

新しいExportFontAttributeを使用すると、カスタムフォントがUWPに表示されません。

再現する手順

  1. 共有プロジェクトの埋め込みリソースとして、Google Fonts、FontAwesome、icomoonなどのTTFまたはOTFファイルを追加します
  2. ExportFont属性をアセンブリに追加します。 例: [assembly: ExportFont("FA5Regular.otf", Alias = "FontAwesome")]
  3. XAMLマークアップでフォントファミリーを参照する
  4. UWPアプリをコンパイルして実行する

予想される行動

カスタムフォントを使用する必要があります。

実際の動作

カスタムフォントはiOSとAndroidで使用されますが、UWPでは使用されません。

基本情報

  • 問題のあるバージョン:4.5.0.617
  • プラットフォームターゲットフレームワーク:

    • iOS:13.4

    • Android:9.0

    • UWP:18362

複製リンク

https://github.com/jfversluis/EmbeddedFontsSample

embedded fonts fonts 3 in-progress high impact UWP bug

最も参考になるコメント

同じ問題が発生しています。 UWPは常にXamarin.Formsで後から付け加えられたものであり、ほとんどサポートされていないようです。 使用量はおそらくAndroidやiOSよりはるかに少ないと思いますが、非常にイライラします。

全てのコメント55件

TTFまたはOTF形式の埋め込みフォントはAndroidとiOSで機能します。

Captura de pantalla 2020-04-20 a las 16 17 49

UWPでは、FontawesomeOTFフォントが期待どおりに機能していません。
Captura de pantalla 2020-04-20 a las 16 17 59

同じ問題が発生しています。 UWPは常にXamarin.Formsで後から付け加えられたものであり、ほとんどサポートされていないようです。 使用量はおそらくAndroidやiOSよりはるかに少ないと思いますが、非常にイライラします。

UWPでもこの問題が発生しました。 ただし、ExportFont宣言からAliasを削除すると、機能するようになりました。

これが私がしたことです:

  1. 自分でフォントを作成しました。 私が使用したグリフはすべて小文字にマッピングされていました
  2. App.xaml.csで投影された共有に、次を追加しました:[アセンブリ:ExportFont( "karenfont.ttf")]
  3. 共有プロジェクトの最上位ディレクトリに埋め込みリソースとしてkarenfont.ttfを追加しました。
  4. 私のxamarinフォームxamlファイルには、次のものがあります。
    <Button Text="b" FontFamily="karenfont"/>

これはUWPで機能するようになりました。 Androidでは動作しません。 Xamarin Formsv4.5.0.617を使用しています

同じ問題が発生しています。 UWPは常にXamarin.Formsで後から付け加えられたものであり、ほとんどサポートされていないようです。 使用量はおそらくAndroidやiOSよりはるかに少ないと思いますが、非常にイライラします。

多くのXamarin開発者(およびXamarinに関連するものに取り組むビジュアルスタジオ開発者)はMacのみを使用し、Windowsを使用する場合は純粋にUWPを無視すると思います。 サンプルプロジェクトにUWPが含まれていることもありますが、ビデオプレゼンテーションに表示されることはめったにありません。そのため、デモされている機能が実際にUWPで機能するかどうかさえわかりません。

@jsuarezruiz Xamarin 4.6の最初のリリースバージョンでExportFontを試しています

私は、製品でiOS、Android、およびUWPをサポートする必要があるという不幸な立場にあり、UWPが頻繁に取り残されるため、実際に新しい機能を使用するには、リリースサイクルを数回待たなければなりませんでした。
ロードするカスタムフォントは3つあります。 なんらかの理由で、UWP用に読み込めないのはアイコンフォントだけです。 他の2つのプラットフォームには問題はありません。

@joshminorなので、この方法でUWPで動作する3つのフォントのうち2つを取得しますか?
たぶん、問題を引き起こしているいくつかのフォントに固有の何かがあります...

実際、動作する2つのフォントがWindowsテストマシンにシステムフォントとしてインストールされていることに気づきました...それはそれと関係があるかもしれません。
編集
動作しないフォントをインストールしてみましたが、何も変わりませんでした。 Google WebFonts( "Lobster")とはまったく異なるフォントを試しましたが、問題なく動作します(エイリアスが機能しない場合を除く)

私はロブスターフォントを試しましたが、それが機能する唯一の方法は、システムにインストールした場合でした。 フォントの埋め込みが機能しませんでした。

編集:私はそれを取り戻しました、それはうまくいきました(私は名前にタイプミスがありました)。 それで、いくつかのフォントは機能し、いくつかのフォントは機能しないようですか? 非常に興味をそそる

もう少し情報

このグーグルフォントを取得し、コード内のファイルとその参照の名前をLobster-Regular.ttfからLobster-Regular-renamed.ttfに変更しました。これにより、機能しなくなりました。 元の名前を元に戻すと、再び機能します。
これは、ファイル名が機能するためにフォント自体の内部プロパティと一致する必要があることを示している可能性があり、同じ実装で異なる結果が得られる理由を説明できます。これは、フォントファイル自体の内容に依存します。

Xamarin Forms 4.6.0.726にアップグレードしたところ、埋め込みフォントのkarenfontはまだUWP(Windows 10 1903)で動作しています。 それはまだAndroid(Android 10)では動作していません。

ロードされないフォントはカスタムアイコンフォントです。FontForgeで内部フォントファミリー名がファイル名とまったく同じであることを確認しましたが、ロードされません。 ここのどこかにパターンがあると思います。 とりあえず、以前にフォントをロードした方法にフォールバックします(プラットフォームごとのリソース)

IcoMoonアプリを使用してカスタムフォントを作成しました。 興味深いのは、グリフを文字にマッピングしてからxamlで文字を参照するまで( &#xf57e;ような16進コードを使用するのではなく)、karenfontの埋め込みが機能しなかったことです。

フォントファイルを再作成して機能することを確認しましたが、機能するためにはフォント名とファイル名が類似している必要があるようです。

また、機能しているように見えても、すべてのUI要素が期待どおりに機能するとは限りません。つまり、フォント画像ソースのツールバーアイコンが機能していないようで、適切なアイコンの代わりに正方形が表示されます。

MaterialDesignIconsフォント(https://materialdesignicons.com/)を使用しても同じ問題が発生し、iOSとAndroidでは正常に機能しますが、UWPではすべての長方形が機能します。

Font Packがインストールされている場合は同じように見えますが、マシンにインストールされていないFontAwesomeやMaterialDesignIconsのようなプロジェクトの一部である場合は、小さな長方形だけでは機能しません。

各プロジェクトに追加してResourceDictionaryで参照する古い方法に戻ると機能しますが、それはより多くの作業であり、新しい注目度ではありません。

これがリグレッションなのか、他のプロジェクトにUWPが含まれていないために機能しなかったのかはわかりません。

ここでも同じですが、UWPで正方形のみが表示されます...

これがいつ解決されるかについての更新はありますか?

ここでも同じです...絶望的なUWP ...

こっちも一緒。 UWPが死んでいるようです。

わかりました。現在のプロジェクトでこれを修正する必要があるので、修正する方法を見ていきます。

@ samhouts @ jsuarezruizこれが作業中であることを示してください。 ありがとう

OK私はここで何が起こっているのかを見つけたと思います、そしてそれはPRを必要としません。

UWPの場合、古い方法では、OnPlatformを含むFontPackをResourcesDictionaryに追加すると、次のようになります。

<ResourceDictionary>
  <OnPlatform x:TypeArguments="x:String"
            x:Key="IconFont">
    <On Platform="Android"
        Value="materialdesignicons-webfont.ttf#Material Design Icons" />
    <On Platform="iOS"
        Value="Material Design Icons" />
    <On Platform="UWP"
        Value="/Assets/materialdesignicons-webfont.ttf#Material Design Icons" />
  </OnPlatform>
</ResourceDictionary>

AndroidとUWPの場合、埋め込みフォントで動作するための#Material Design Iconsがあることに注意してください。この部分は、UWPでも引き続き必要です。

これは、コントロールギャラリーのXamarinコードベースのように、XAMLのEmbeddedFontsページに次の行があることがわかりました。

<Label Text="Mono Font" FontFamily="PTM55FT#PTMono-Regular"/>

フォント名の最後にある#PTMono-Regularに注目してください。

そこで、次のようにフォント名の末尾に#Material Design Iconsを追加しました。

FontFamily="materialdesignicons-webfont#MaterialDesignIcons"

そして、Hey Prestoが機能することを確認しました。現在のプロジェクトに必要なのは、UWP / DroidとiOSだけです。

#の後に続く部分を知りたい場合は、フォントファイル内のフォントの名前です。これを取得する最も簡単な方法は、(Win10ではとにかく!)フォントファイルを開くことです。上部に名前があります。

image

ドキュメント以外に修正するものがないため、これで問題が解決することを願っています。 samhouts @ jsuarezruiz

ユーザーが指定していない場合、XFはファイルから最初のフォント名を取得する必要があると思います

はい! app.xamlにこれがあり、フォントは機能しています。
<OnPlatform x:Key="MaterialWebFontFamily" x:TypeArguments="x:String"> <On Platform="Android" Value="materialdesignicons-webfont.ttf#Material Design Icons" /> <On Platform="UWP" Value="Assets/Fonts/materialdesignicons-webfont.ttf#Material Design Icons" /> </OnPlatform>

@ ktd12しかし、新しいEmbeddedFontsを使用していますか?

@VladislavAntonyuk多分それはそれを調べる必要があります。 古いバージョンのXFで試したことがないので、UWPで動作したことがあるのか​​、それとも新しい問題なのかわからないので、現在のプロジェクトで強調されました。 それがうまくいくとあなたが信じているかどうか見てみてください。

すみません-話が早すぎました。 埋め込みフォントとして使用しているフォントは、私が作成したkarenfontというフォントです。 他の人とは逆の問題があります。UWPでは機能しますが、Androidでは機能しません。 XF 4.6.0.726、Surface Pro7ではWindows10 1903、Samsung Galaxys10ではAndroid10を使用しています
<Button x:Name="btnBackup" Text="b" HorizontalOptions="FillAndExpand" FontSize="Medium" FontFamily="karenfont"/>

Windowsでは、文字「b」は次のようになります。
b on windows

Androidでは、文字「b」は次のようになります。
b on android

フォントはどのように見えるか:
karenfont

OK私はここで何が起こっているのかを見つけたと思います、そしてそれはPRを必要としません。

UWPの場合、古い方法では、OnPlatformを含むFontPackをResourcesDictionaryに追加すると、次のようになります。

<ResourceDictionary>
  <OnPlatform x:TypeArguments="x:String"
            x:Key="IconFont">
    <On Platform="Android"
        Value="materialdesignicons-webfont.ttf#Material Design Icons" />
    <On Platform="iOS"
        Value="Material Design Icons" />
    <On Platform="UWP"
        Value="/Assets/materialdesignicons-webfont.ttf#Material Design Icons" />
  </OnPlatform>
</ResourceDictionary>

AndroidとUWPの場合、埋め込みフォントで動作するための#Material Design Iconsがあることに注意してください。この部分は、UWPでも引き続き必要です。

これは、コントロールギャラリーのXamarinコードベースのように、XAMLのEmbeddedFontsページに次の行があることがわかりました。

<Label Text="Mono Font" FontFamily="PTM55FT#PTMono-Regular"/>

フォント名の最後にある#PTMono-Regularに注目してください。

そこで、次のようにフォント名の末尾に#Material Design Iconsを追加しました。

FontFamily="materialdesignicons-webfont#MaterialDesignIcons"

そして、Hey Prestoが機能することを確認しました。現在のプロジェクトに必要なのは、UWP / DroidとiOSだけです。

#の後に続く部分を知りたい場合は、フォントファイル内のフォントの名前です。これを取得する最も簡単な方法は、(Win10ではとにかく!)フォントファイルを開くことです。上部に名前があります。

image

ドキュメント以外に修正するものがないため、これで問題が解決することを願っています。 samhouts @ jsuarezruiz

こんにちは、
これをサンプルプロジェクトで機能させますか? https://github.com/jfversluis/EmbeddedFontsSample
試しましたが、うまくいきませんでした。

#fontnameを追加しても、私には何の効果もなかったようです。 最初はうまくいくと思っていましたが、システムからフォントをアンインストールすると、正方形の表示に戻りました。 別の同僚に、フォントをインストールすると正しく表示されることを確認しました。

もう少し掘り下げましたが、これはフォントファイルと_何か_関係があります。 別のフォントに切り替えることができ、問題なく動作します。 フォントを再エクスポートして、何かが機能するかどうかを確認します。

はい、同意します。UWPでは機能しません。 Windows 10のOSにフォントファイルを手動でインストールしない限り、 @ CliffAgiusによって提案された#FontNameを追加しないでください。したがって、それは修正ではありません。 :)そしてそれはチーム@ samhouts @ jsuarezruizによって対処される必要があります。

Xamarinリリースブログ自体に含まれているサンプルプロジェクトは、UWPでは機能しません。https://github.com/jfversluis/EmbeddedFontsSample
https://devblogs.microsoft.com/xamarin/embedded-fonts-xamarin-forms/

image

最近、Xamarin.Formsで新機能をプッシュするたびに、Windows10のサポートを意図的に破棄しているようです。 :(

@UdaraAlwisはい、これを完全に忘れていたので投稿してくれてありがとう。他の何かのためにFotPackを開発マシンにロードしたので修正が機能したので、機能していると思いました。 プレビューのためにクライアントにプッシュするとすぐに壊れました。 一部のユーザーのUWPを対象としているため、このプロジェクトにフォントを追加するという昔ながらの長い方法に戻らなければなりませんでした。

チームがビルドでUWPを無視していることに同意しません。これを取得するために、UIテストが作成されておらず、多くの開発者がMacを使用しているため、UWPをテストできません。 Macでビルドする場合、これを行うためのより良い方法が必要です。おそらく、Windows用の#HotRestartスタイルのものです。

私の投票を追加するだけです。
ExportFontは、フォントがWindowsマシンに既にインストールされている場合にのみUWPで機能します。 そのため、アプリがインストールされると、クライアントマシンでは機能しません。

今のところ、フォントをフォルダーに配置し、アクションをコンテンツとして設定し、#表記で参照する必要がありました。

/fonts/xyx.ttf#xyz.ttf

デバッグモードのとき、または「.netネイティブツールチェーンでコンパイル」がオフになっているときに、フォントを正しく表示することができました。
.netネイティブコンパイルをオンに戻すと、すぐにすべてのフォントが壊れます。

私はXamarinを初めて使用するため、このソリューションは誤解を招く可能性があります。 @CliffAgiusで説明されているアプローチを使用しました

私の場合、フォントをインストールする必要はありません。 それはすべて3プラットフォームに私の作品の唯一の方法は、「.OTF」ファイルではなく、「.TTF」ファイルを使用することです。

「.ttf」ファイルはテキストフォントファミリーでのみ機能しますが、Glyphでは機能しません。
これに加えて、それぞれのプラットフォーム固有のフォルダに「.otf」を追加する必要があります。

以下は私の使用法とリソースファイルです。

以下のコードはIOS用にテストされていません。

リソースファイル:

<?xml version="1.0" encoding="utf-8" ?>
<ResourceDictionary xmlns="http://xamarin.com/schemas/2014/forms"
                    xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
                    xmlns:d="http://xamarin.com/schemas/2014/forms/design"
                    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
                    xmlns:local="clr-namespace:ProjectName.Themes.FontIcon;assembly=ProjectName.Themes"
                    mc:Ignorable="d"
                    x:Class="ProjectName.Themes.Styles.IconImage">
    <ResourceDictionary.MergedDictionaries>
        <ResourceDictionary Source="ColorsResource.xaml" />
    </ResourceDictionary.MergedDictionaries>
    <OnAppTheme x:Key="ImageLogoSample"
                x:TypeArguments="FileImageSource"
                Light="{x:Static local:AwesomeFontSolid.TicketAlt}"
                Dark="{x:Static local:AwesomeFontSolid.PersonBooth}" />  
    <!-- Sizes -->
    <x:Double x:Key="SizeTabIcon">24</x:Double>

    <!-- Fonts Icon -->

    <OnPlatform x:TypeArguments="x:String"
                x:Key="FontAwesomeBrand">
        <On Platform="Android"
            Value="FABrand.otf#Font Awesome 5 Brands" />
        <On Platform="iOS"
            Value="FABrand-Regular" />
        <On Platform="UWP"
            Value="/Assets/FABrand.otf#Font Awesome 5 Brands" />
    </OnPlatform>

    <OnPlatform x:TypeArguments="x:String"
                x:Key="FontAwesomeRegular">
        <On Platform="Android"
            Value="FARegular.otf#Font Awesome 5 Pro" />
        <On Platform="iOS"
            Value="FontAwesome5Free-Regular" />
        <On Platform="UWP"
            Value="/Assets/FARegular.otf#Font Awesome 5 Pro" />
    </OnPlatform>

    <OnPlatform x:TypeArguments="x:String"
                x:Key="FontAwesomeSolid">
        <On Platform="Android"
            Value="FASolid.otf#Font Awesome 5 Pro" />
        <On Platform="iOS"
            Value="FontAwesome5Free-Solid" />
        <On Platform="UWP"
            Value="/Assets/FASolid.otf#Font Awesome 5 Pro" />
    </OnPlatform>



    <OnPlatform x:TypeArguments="x:String"
                x:Key="FontAwesomeLight">
        <On Platform="Android"
            Value="FALight.otf#Font Awesome 5 Pro" />
        <On Platform="iOS"
            Value="Font Awesome 5 Pro" />
        <On Platform="UWP"
            Value="/Assets/FALight.otf#Font Awesome 5 Pro" />
    </OnPlatform>

    <OnPlatform x:TypeArguments="x:String"
                x:Key="FontAwesomeSolidDuoTone">
        <On Platform="Android"
            Value="FASolidDuotone.otf#Font Awesome 5 Duotone" />
        <On Platform="iOS"
            Value="Font Awesome 5 Duotone" />
        <On Platform="UWP"
            Value="/Assets/FASolidDuotone.otf#Font Awesome 5 Duotone" />
    </OnPlatform>


    <OnPlatform x:TypeArguments="x:String"
                x:Key="MaterialDesign">
        <On Platform="Android"
            Value="MD.otf#Material Design Icons" />
        <On Platform="iOS"
            Value="Material Design Icons" />
        <On Platform="UWP"
            Value="/Assets/MD.otf#Material Design Icons" />
    </OnPlatform>

    <!--ICONS 30 by 30-->  
    <!--Black-->
    <FontImageSource x:Key="IconPowerOff"
                     FontFamily="{DynamicResource FontAwesomeSolid}"
                     Glyph="{x:Static local:AwesomeFontSolid.PowerOff}"
                     Size="30"
                     Color="Black" />
    <!--ICONS 100 by 100-->
    <FontImageSource x:Key="IconHand"
                     FontFamily="{DynamicResource FontAwesomeSolid}"
                     Glyph="{x:Static local:AwesomeFontSolid.Hands}"
                     Size="100"
                     Color="Black" />   
</ResourceDictionary>

そしてXamalの使用法で

  <Image Margin="20,0" WidthRequest="30">
                        <Image.Source>
                            <FontImageSource
                                FontFamily="{StaticResource FontAwesomeSolid}"
                                Glyph="{x:Static local:AwesomeFontSolid.Users}"
                                Color="{DynamicResource SurfaceTextColor}" />
                        </Image.Source>
                    </Image>

サミット、Android / iOSでembedded / ExportFontを使用して.ttfフォントを使用しています。

ただし、トラブルシューティングは当たり前のことですが、機能しない理由を理解するのに役立つメッセージや指標はありません。 これは、Xamarinコードベースでは気に入らないことです。多くの場合、誤ったパラメーターを渡すと、パラメーター値が正しくないことを通知する代わりに、関数は何もしません。 エラーメッセージ/ロギング/例外は本当に役に立ちます。

サミット、Android / iOSでembedded / ExportFontを使用して.ttfフォントを使用しています。

ただし、トラブルシューティングは当たり前のことですが、機能しない理由を理解するのに役立つメッセージや指標はありません。 これは、Xamarinコードベースでは気に入らないことです。多くの場合、誤ったパラメーターを渡すと、パラメーター値が正しくないことを通知する代わりに、関数は何もしません。 エラーメッセージ/ロギング/例外は本当に役に立ちます。

こんにちはクリス、

はい、同じ動作を観察しましたが、何が問題なのかを理解またはデバッグするのは困難でした。「。ttf」ファイルはAndroidとIOSで機能しますが、UWP(Glyph)では機能しません。
そこで、.otfファイルを使用してみましたが、イメージ用の3つのプラットフォームすべて(Glyph)で機能します。

また、奇妙なことに、「。ttf」はテキストフォントの3つのプラットフォームすべてで機能します(説明方法はわかりませんが、Roboto-Italic.ttfファイルは3つのプラットフォームすべてで機能します)が、前に述べたように、.ttfファイルのGlyphは機能しません。ワーキング。

すぐに修正されることを願っています。

@サミット。
あなたのコードは、Xamarinでカスタムフォントをサポートする「レガシー」な方法を参照していると思います。 そのシナリオでは、各プロジェクトフォルダーにフォントファイルをインストールし、マニフェストコードを追加してから、リソースファイルの例に示されているフォント名を参照します。各プラットフォームでは、ファイル名のバリエーションがわずかに異なります。
Xamarinで最近導入された「ExportFont」機能でここで報告された問題で、共有プロジェクトにフォントを一度含めてから、ExportFontディレクティブを使用してアプリに通知することができます。
[アセンブリ:ExportFont( "Samantha.ttf"、Alias = "MyAwesomeCustomFont")]

https://devblogs.microsoft.com/xamarin/embedded-fonts-xamarin-forms/

このバグは、これがAndroidおよびiOSプロジェクトでは機能するが、以前の方法に戻す必要があるUWPでは機能しないことを報告しました。

ここで同じ問題に直面しています。 AndroidとiOSで簡単に機能するフォントの埋め込みを使用していました。 また、クライアントの要件に応じて、UWPプロジェクトを追加しました。 それはまったく機能せず、私たちが見るのはいくつかの箱だけです。

サミット、Android / iOSでembedded / ExportFontを使用して.ttfフォントを使用しています。
ただし、トラブルシューティングは当たり前のことですが、機能しない理由を理解するのに役立つメッセージや指標はありません。 これは、Xamarinコードベースでは気に入らないことです。多くの場合、誤ったパラメーターを渡すと、パラメーター値が正しくないことを通知する代わりに、関数は何もしません。 エラーメッセージ/ロギング/例外は本当に役に立ちます。

こんにちはクリス、

はい、同じ動作を観察しましたが、何が問題なのかを理解またはデバッグするのは困難でした。「。ttf」ファイルはAndroidとIOSで機能しますが、UWP(Glyph)では機能しません。
そこで、.otfファイルを使用してみましたが、イメージ用の3つのプラットフォームすべて(Glyph)で機能します。

また、奇妙なことに、「。ttf」はテキストフォントの3つのプラットフォームすべてで機能します(説明方法はわかりませんが、Roboto-Italic.ttfファイルは3つのプラットフォームすべてで機能します)が、前に述べたように、.ttfファイルのGlyphは機能しません。ワーキング。

すぐに修正されることを願っています。

「Roboto-Italic.ttf」が3つのプラットフォームすべてで機能する理由は、テストに使用しているWindowsマシンに物理的にインストールされているためであることを確認することをお勧めします。
一部のフォントがExportFontでUWPで機能し、他のフォントがWindowsに既にインストールされているフォントのみを使用していることに気付くまで、機能しない理由を理解するのに長い時間がかかりました。

問題は、UWPがフォントファミリー名の一部としてフォント名を必要としていることです。 Xamarin Formsは、フォント名がフォントファイル名と同じであると誤って想定します。 動作しない多くのフォントの場合(たとえばFontAwesome)

この問題を解決するためにPRを作成します。

Xamarin.Forms:4.8.0.1269
ExportFontはAndroidで機能しますが、UWPでは機能しません

共有プロジェクトでExportFontを使用する代わりに、次の回避策があります。

  1. フォントファイル(xxx.ttf)をAndroindおよびUWPプロジェクトのAssetsフォルダーにコピーします。

[アンドロイド]:
Assets / xxx.ttf
ビルドアクション:AndroidAsset
出力ディレクトリにコピー:コピーしないでください

[UWP]:
Assets / xxx.ttf
ビルドアクション:コンテンツ
出力ディレクトリにコピー:コピーしないでください

  1. テキストのFontFamilyプロパティを設定します。

       <Label.FontFamily>
            <OnPlatform x:TypeArguments="x:String">
                <On Platform="Android"
                    Value="xxx.ttf#Font Name" />
                <On Platform="UWP"
                    Value="/Assets/xxx.ttf#Font Name" />
            </OnPlatform>
        </Label.FontFamily>
    

今では期待どおりに動作します!

@ johncao158これは、Xamarin Formsでカスタムフォントを使用する従来の方法であり、最初から機能しています。 この問題は、具体的には[ExportFont]がUWPで機能しないことに関するものです。 提案した回避策では、フォントを埋め込みリソースとして追加することはできません。

私のプロジェクトは次のように機能します。

[共有プロジェクト]
AssemblyInfo.cs
[アセンブリ:ExportFont( "entypo.ttf"、Alias = "entypo-plus")]
Fonts/entypo.ttf「iOSおよびAndroid用」

ビルドアクション:コンテンツ
出力ディレクトリにコピー:コピーしないでください

私のプロジェクトは次のように機能します。

[共有プロジェクト]
AssemblyInfo.cs
[アセンブリ:ExportFont( "entypo.ttf"、Alias = "entypo-plus")]
Fonts/entypo.ttf「iOSおよびAndroid用」

ビルドアクション:コンテンツ
出力ディレクトリにコピー:コピーしないでください

あなたは正しいです。 この新機能はiOSとAndroidで動作します。
問題は、フォントがマシンにすでにインストールされていない限り、Windowsでは機能しないことです。

なぜこれが閉鎖されたのですか? カスタムフォントはUWPデバッグでは機能しますが、リリースバージョンでは機能しません。

リリースバージョンのサイドロードで使用すると、カスタムフォントが表示されているページが完全に空白になります。 xamlでフォントファミリーをコメントアウトすると、ページは正常に表示されますが、もちろんカスタムフォントはありません。

また、windows / fontフォルダーをチェックインし、フォントアプリをインストールしたラップトップにありました。

最新のXF4.8.0.1534 + 384-sha.712849b9d-azdo.4114742を使用しても、UWPリリースで@ BillyMartin1964と同じ問題が

@ BillyMartin1964と同じ問題があります。フォントは、Android / iOS、さらにはデバッグモードのUWPでも正常に機能しますが、リリースモードでは機能しないため、非常に混乱していました。

@samhoutsには、これに使用できる回避

少なくとも、ユーザーのコンピューター/ Xboxにインストールされていない場合、カスタムフォントを無視するコードを作成できますか?

少なくとも、ユーザーのコンピューター/ Xboxにインストールされていない場合、カスタムフォントを無視するコードを作成できますか?

ページに2つの要素を追加して、実行しているプラ​​ットフォームに応じてそれらを表示できると思います。 そのためにOnPlatformを使用してください。

@ArtjomP 、それは問題ではありません。 別のPCへのリリースビルドサイドロードで埋め込みフォントを使用すると、ページ全体が空白になります。 他のPCに以前にフォントがインストールされていなかったためだと誰かが言った。 これについてはよくわかりませんが、その場合は、インストールされているフォントをテストし、インストールされていない場合は使用しないようにする必要があります。

個人的には、フォントがユーザーのマシンのフォントフォルダにあったように見えるので、別の問題だと思います。

@ BillyMartin1964かなり奇妙なことに、私のページはすべてUWPリリースでうまく機能します。 カスタムフォントのラベルは、 @ jsuarezruizの上の画像のように正方形のみを表示し

@ArtjomP 、別のマシンにインストールしていますか?

@ BillyMartin1964確かに私は自分のマシンでアプリを開発しており、CIと別のマシンでUIテストを行っており、ユーザーはストアのアプリをPCとXboxで使用しています。

@ArtjomP 、本番アプリで使用するのが怖いので、ストアについて説明できません。 ページが真っ白であるかどうかの唯一の違いは、FontFamily属性を削除することです。 正方形は彼のアイコンのようです。

@ BillyMartin1964には、objフォルダーとbinフォルダーを削除し、FontFamily属性を含めてプロジェクトを再構築することができます。 それは時々不思議なエラーを取り除くのに役立ちます。

なぜこれが閉鎖されたのですか? カスタムフォントはUWPデバッグでは機能しますが、リリースバージョンでは機能しません。

リリースバージョンのサイドロードで使用すると、カスタムフォントが表示されているページが完全に空白になります。 xamlでフォントファミリーをコメントアウトすると、ページは正常に表示されますが、もちろんカスタムフォントはありません。

また、windows / fontフォルダーをチェックインし、フォントアプリをインストールしたラップトップにありました。

これには新しい問題があります:#12404

このページは役に立ちましたか?
0 / 5 - 0 評価