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