Проблема CustomPicker в Xamarin Forms

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

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);
        }            
    }
}
}
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
0
132
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

На самом деле есть два 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);
        }
    }
}

Это полностью работает! И даже выглядит лучше (имхо) как Wheel Picker :) Большое спасибо, ты мой MVP ;)

user8428135 09.04.2019 19:40

Конечно без проблем

FreakyAli 09.04.2019 19:41

Просто интересно, знаете ли вы, почему это происходит с тем, который я использовал раньше? Мне он кажется немного сломанным!

user8428135 09.04.2019 19:44

На самом деле это последняя версия средства выбора, и, следовательно, она будет правильно работать в последних версиях Android (в большинстве случаев). Теперь версия AppCompat поддерживается так, чтобы она была совместима даже с более низкими версиями Android. , и, следовательно, обычно лучше поддерживается по той же причине, надеюсь, я понимаю

FreakyAli 09.04.2019 19:49

Другие вопросы по теме