Как реализовать пользовательские средства визуализации для элементов управления Xamarin

#c# #xamarin

#c# #xamarin

Вопрос:

Кто-нибудь может помочь со следующим?

У меня есть проект Xamarin Android в Visual Studio. У меня есть элемент управления выбора, и я хочу создать пользовательский средство визуализации, чтобы он центрировал текст.

У меня есть два проекта в решении OGLMobile и OGLMobile.Android.

В OGLMobile.Проект Android в MainActivity.cs У меня есть следующий код (все компилируется нормально):

 [assembly: ExportRenderer(typeof(OGLMobile.Droid.MyPicker), typeof(OGLMobile.Droid.BetterPickerRenderer))]

.
.
.

public class MyPicker : Picker
    {
        public MyPicker() : base()
        {
        }
    }

    public class BetterPickerRenderer : PickerRenderer
    {
        public BetterPickerRenderer(Context context) : base(context)
        {
        }

        protected override void OnElementChanged(ElementChangedEventArgs<Picker> e)
        {
            base.OnElementChanged(e);

            if (Control != null)
            {
                Control.Gravity = Android.Views.GravityFlags.CenterHorizontal;
            }
        }
    }
 

Мой вопрос в том, как мне использовать это в проекте OGLMobile, где я хочу динамически создавать такой элемент управления на C # в MainPage.xaml.cs?

Итак, в то время как у меня теперь есть:

 private Picker m_picker = null;
 

Я хотел бы иметь:

 private MyPicker m_picker = null;
 

На данный момент тип MyPicker не может быть найден в этом решении.

Спасибо за любую помощь, Митч.

Комментарии:

1. MyPicker необходимо определить в проекте общих форм, а средства визуализации должны быть в проектах платформы

Ответ №1:

Как сказал Джейсон, поместите MyPicker в Xamarin.forms и поместите средство визуализации в проект платформы Droid, как показано ниже.

введите описание изображения здесь

Класс средства визуализации в проекте платформы Android:

 [assembly: ExportRenderer(typeof(MyPicker), typeof(BetterPickerRenderer))]
namespace Test.Droid
{
class BetterPickerRenderer : PickerRenderer
{
    public BetterPickerRenderer(Context context) : base(context)
    {
    }

    protected override void OnElementChanged(ElementChangedEventArgs<Picker> e)
    {
        base.OnElementChanged(e);

        if (Control != null)
        {
            Control.Gravity = Android.Views.GravityFlags.CenterHorizontal;
        }
    }
}
}
 

Использование:

введите описание изображения здесь

Комментарии:

1. Большое вам обоим спасибо. Теперь у меня это работает благодаря вашим разъяснениям.

2. Если вы решили эту проблему, вы могли бы принять ее в качестве ответа. Это поможет людям, у которых такая же проблема.