Проблема Xamarin Forms CustomPicker

1

Я написал CustomRenderer на XamarinForms, чтобы стилизовать мои сборщики. Но на обычных сборщиках я сталкиваюсь с проблемой сейчас, когда я выбираю их, но нажимаю в любом месте на экране, чтобы они не сфокусировались, не нажимая на подсказки, что делает их непригодными для использования. Поэтому я больше не могу выбрать тот же самый сборщик, так как событие с фокусом (или щелчком) больше не запускается. Как ни странно, у меня также есть Date и Time Picker с тем же стилизованным содержимым, где этой проблемы не бывает...

XAML для сборщика:

<CustomAndroidPicker:CustomAndroidPicker x:Name="ParkPicker" ItemDisplayBinding="{Binding Name}" Grid.Row="6" Grid.Column="0" Grid.ColumnSpan="6" SelectedIndexChanged="ParkSelectionChanged" />

И вот код, который я подключил к своему CustomRenderer для проекта под Android:

[assembly: ExportRenderer(typeof(CustomAndroidPicker), typeof(CustomPickerAndroid))]
namespace SolarmonAndroidApp.Droid
{
public class CustomPickerAndroid : PickerRenderer
{
    public CustomPickerAndroid(Context context) : base (context)
    {

    }

    protected override void OnElementChanged(ElementChangedEventArgs<Xamarin.Forms.Picker> e)
    {
        base.OnElementChanged(e);
        if (Control != null)
        {
            Control.Background = Android.App.Application.Context.GetDrawable(Resource.Drawable.CustomAndroidEntryDraw);
            Control.Gravity = GravityFlags.CenterHorizontal;
            Control.SetPadding(5, 10, 5, 10);
        }            
    }
}
}
Теги:
xamarin

1 ответ

0
Лучший ответ

На самом деле есть два PickerRenderer: Xamarin.Forms.Platform.Android.AppCompat.PickerRenderer и базовый Xamarin.Forms.Platform.Android один, основной из которых имеет эту проблему, что вам действительно нужно сделать, это что-то вроде:

namespace SolarmonAndroidApp.Droid
{
[assembly: ExportRenderer(typeof(CustomAndroidPicker), typeof(CustomPickerAndroid))]
 public class CustomPickerAndroid : Xamarin.Forms.Platform.Android.AppCompat.PickerRenderer
 {
    public CustomPickerAndroid(Context context) : base(context)
    {

    }
    protected override void OnElementChanged(ElementChangedEventArgs<Xamarin.Forms.Picker> e)
    {
        base.OnElementChanged(e);
        if (Control != null)
        {
            Control.Background = Android.App.Application.Context.GetDrawable(Resource.Drawable.CustomAndroidEntryDraw);
            Control.Gravity = GravityFlags.CenterHorizontal;
            Control.SetPadding(5, 10, 5, 10);
        }
    }
}
  • 0
    Это полностью работает! И выглядит даже лучше (imho) как Wheel Picker :) Спасибо большое, ты мой MVP;)
  • 0
    Конечно, нет проблем вообще
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню