2017-01-17 13 views
1

私はfont.otfファイルを使用しているアプリケーションを開発しています。私のアプリはアンドロイド、ios、windows 10、windows 8.1で動作します。私は、フォントファミリーを設定する私のラベルのスタイルを作成する必要があります。 AndroidとiOS用 私はこのlinkXamarinフォーム:UWPとWindows 8.1のカスタムフォント

私はthis-

<Label.FontFamily> 
     <OnPlatform x:TypeArguments="x:String"> 
      <OnPlatform.iOS></OnPlatform.iOS> 
      <OnPlatform.Android>Lobster-Regular.ttf#Lobster-Regular</OnPlatform.Android> 
      <OnPlatform.WinPhone></OnPlatform.WinPhone> 
     </OnPlatform> 
    </Label.FontFamily> 

new Label { 
    Text = "Hello, Forms!", 
    FontFamily = Device.OnPlatform (
     null, 
     null, 
     @"\Assets\Fonts\Lobster-Regular.ttf#Lobster-Regular" 
       // Windows Phone will use this custom font 
    ) 
} 

のようなXAMLページにしようとした参照しかし、私は私のアプリを実行するとフォントは、Windows 10および8.1に設定されていません。

Windows 10および8.1のフォントファミリを設定する方法を教えてください。 また、すべてのプラットフォームをカバーするフォントファミリーを適用する効率的な方法はありますか?

答えて

2

注:あなたはあなたがNavigationPage

を使用している場合custom fonts do not workバグがあるのWindows 8.1/UWPでカスタムフォントのカスタムレンダラーは必要ありません。 Xamarinのサンプルコードは、単純ミスのカップルを持っています

  • スラッシュ(「/」)を使用して代わりに
  • パスが(フォントのスタイル、例えば「通常の」なし)[font file]#[font name]の形式でなければなりません

だから、この場合のパスは、実際

"Assets/Fonts/Lobster-Regular.ttf#Lobster" 

する必要があります。また、

012 XAMLでこれを使用することができます
<OnPlatform.WinPhone>Assets/Fonts/Lobster-Regular.ttf#Lobster</OnPlatform.WinPhone> 

フォントファイルがBuildAction:Contentでプロジェクトに含まれていることを確認してください。正しく動作するはずです。

1

あなたはそうのようなWindowsプラットフォーム上でXamarin.Forms.Labelを上書きしますCustomRenderer作成を試みることができる:

[assembly: ExportRenderer(typeof(Xamarin.Forms.Label), typeof(MyLabelRenderer))] 
namespace MyApp.CustomRenderers.Controls 
{ 
    public class MyLabelRenderer : LabelRenderer 
    { 
     protected override void OnElementChanged(ElementChangedEventArgs<Label> e) 
     { 
      base.OnElementChanged(e); 

      if (Control != null) 
      { 
       var font = new FontFamily(@"\Assets\Fonts\Lobster-Regular.ttf#Lobster-Regular"); 

       if (e.NewElement != null) 
       { 
        switch (e.NewElement.FontAttributes) 
        { 
         case FontAttributes.None: 
          break; 
         case FontAttributes.Bold: 
          //set bold font etc 
          break; 
         case FontAttributes.Italic: 
          //set italic font etc 
          break; 
         default: 
          break; 
        } 
       } 
       Control.FontFamily = font; 
      } 
     }  
    } 
+0

すべてのプラットフォーム用にカスタムレンダラーを作成する必要がありますか?だから私はアンドロイドとアイオスのためにそれを設定する必要はありませんか? – Sonali

+1

あなたの例では、 'ios'と' android'のFontファミリを 'null'に設定しています。しかし、もしあなたがそれをそのプラットフォーム上のすべてのラベルに対して異なるものに設定したいのであれば、それぞれのプラットフォーム用の 'CustomRenderer'が私のアプローチです。テキストを表示するすべてのコントロールを取得する場合は、 'Entry'と' SearchBar'についても同様のことをしなければならないことを覚えておいてください – user1

関連する問題