Я пытаюсь настроить отображение некоторых ярлыков в проекте Xamarin Forms.Точнее говоря, я пытаюсь сделать пользовательский рисунок на элементе управления.
Для этой цели я создал пользовательский рендер, где я переопределил метод OnDraw.
Я могу использовать свою метку в коде xaml,он показывает, и код в OnElementChanged внутри пользовательского рендрера выполняется.
К сожалению, моя функция OnDraw никогда не вызывается.
Я нашел много ссылок на эту ситуацию в Google (и StackOverflow), но я 'Я все еще не могу решить проблему.
Это мой общий код проекта:
public class CustLabel : Label
{
public CustLabel()
{
// THIS IS WORKING: LABEL HAS RED TEXT
TextColor = Color.Red;
}
}
Это пользовательский код рендерера:
using Android.Content;
using Android.Graphics;
using Xamarin.Forms;
using Xamarin.Forms.Platform.Android;
[assembly: ExportRenderer(typeof(MyApp.CustomRenderers.CustLabel), typeof(MyApp.Droid.CustomRenderers.CustLabelRenderer))]
namespace MyApp.Droid.CustomRenderers
{
public class CustLabelRenderer : LabelRenderer
{
public CustLabelRenderer(Context context) : base(context)
{
this.SetWillNotDraw(false);
}
// I DON'T ACTUALLY NEED OnElementChanged, I USE IT JUST TO SEE IF LABEL GETS CUSTOMIZED IN SOME WAY
protected override void OnElementChanged(ElementChangedEventArgs<Label> e)
{
base.OnElementChanged(e);
if (Control != null)
{
// THIS IS WORKING: LABEL HAS AQUA BACKGROUND
Control.SetBackgroundColor(Android.Graphics.Color.Aqua);
}
}
// THIS IS NEVER EXECUTED
protected override void OnDraw(Canvas canvas)
{ // <-- BREAKPOINT HERE, NEVER REACHED
base.OnDraw(canvas);
var paint = new Paint();
paint.Color = Android.Graphics.Color.Blue;
paint.StrokeWidth = 2;
canvas.DrawLine(0, 0, 10, 10, paint);
}
}
}
Спасибо!