1

たとえば、ラベルのフォントを変更したいとします。つまり、次のように書く必要があります。

[assembly: ExportRenderer(typeof(Label), typeof(LabelFontRenderer))]
namespace MyApp.Droid
{
    public class LabelFontRenderer : LabelRenderer
    {
        protected override void OnElementChanged(ElementChangedEventArgs<Label> e)
        {
            base.OnElementChanged(e);
            var label = (TextView)Control; // for example
            Typeface font = Typeface.CreateFromAsset(Forms.Context.Assets, "Roboto-Regular.ttf");  // font name specified here
            label.Typeface = font;
        }
    }
}

ただし、それをプロジェクトに追加すると、すべてのラベルが指定されたフォントでレンダリングされます。一部の特定のラベルのみをそのフォントでレンダリングしたい場合はどうすればよいですか?

おそらく解決策は、Label から継承し、その継承されたクラスにレンダラーを追加して、その特定のクラスのインスタンスにのみ適用し、指定されたラベルにのみ適用することです。したがって、私の質問は 2 つの部分で構成されています。(1) は、私が説明した正しい方法であり、それは機能しますか? (2) 正しい方法は何ですか?

4

1 に答える 1

2

おそらく解決策は、Label から継承し、その継承されたクラスにレンダラーを追加して、その特定のクラスのインスタンスにのみ適用し、指定されたラベルにのみ適用することです。

これは、コントロール/ニーズに合わせてカスタム レンダラーを実行する正しい方法です。タイプのレンダラーをエクスポートするLabelと、アプリ内のすべてのラベルが変更されます。

Label共有プロジェクトで継承されたクラスを作成し、そのためのカスタム レンダラーを定義する必要があります。例えば:

共有/ポータブル プロジェクト:

public class MyLabel : Label {}

Android プロジェクトの場合:

[assembly: ExportRenderer(typeof(MyLabel), typeof(LabelFontRenderer))] 
namespace MyApp.Droid
{
    public class LabelFontRenderer : LabelRenderer
    {
        protected override void OnElementChanged(ElementChangedEventArgs<Label> e)
        {
            base.OnElementChanged(e);
            var label = (TextView)Control; // for example
            Typeface font = Typeface.CreateFromAsset(Forms.Context.Assets, "Roboto-Regular.ttf");  // font name specified here
            label.Typeface = font;
        }
    }
}

使用法:

var myLabel = new MyLabel { Text = "Hello" };
于 2016-08-05T05:31:26.903 に答える