使用自定义渲染器时 Xamarin Picker 的意外行为?
Unexpected behavior of the Xamarin Picker when using custom renderer?
我需要自定义选择器的文本颜色(Title
颜色),这在 Xamarin.Forms 实现中是不可能的,所以我创建了一个简单的渲染器来完成我需要的:
using Android.Content;
using MyProj.Droid.Renderers;
using Xamarin.Forms;
using Xamarin.Forms.Platform.Android;
[assembly: ExportRenderer(typeof(Picker), typeof(CustomPickerRenderer))]
namespace MyProj.Droid.Renderers
{
public class CustomPickerRenderer : PickerRenderer
{
public CustomPickerRenderer(Context context) : base(context) { }
protected override void OnElementChanged(ElementChangedEventArgs<Picker> e)
{
base.OnElementChanged(e);
if (Control != null)
{
Control.SetHintTextColor(((Color)Application.Current.Resources["TextColor"]).ToAndroid());
}
}
}
}
但是控件的样式发生了显着变化,因此它不再是响应任何项目上的点击手势的列表,而是变成了仅响应确定/取消按钮的可滚动列表!
图片:
预期样式(在使用自定义渲染器之前):
意想不到的风格(使用自定义渲染器后):
您的自定义渲染器需要继承自 Xamarin.Forms.Platform.Android.AppCompat.PickerRenderer 而不是 Xamarin.Forms.Platform.Android.PickerRenderer 以获得预期的样式.
我需要自定义选择器的文本颜色(Title
颜色),这在 Xamarin.Forms 实现中是不可能的,所以我创建了一个简单的渲染器来完成我需要的:
using Android.Content;
using MyProj.Droid.Renderers;
using Xamarin.Forms;
using Xamarin.Forms.Platform.Android;
[assembly: ExportRenderer(typeof(Picker), typeof(CustomPickerRenderer))]
namespace MyProj.Droid.Renderers
{
public class CustomPickerRenderer : PickerRenderer
{
public CustomPickerRenderer(Context context) : base(context) { }
protected override void OnElementChanged(ElementChangedEventArgs<Picker> e)
{
base.OnElementChanged(e);
if (Control != null)
{
Control.SetHintTextColor(((Color)Application.Current.Resources["TextColor"]).ToAndroid());
}
}
}
}
但是控件的样式发生了显着变化,因此它不再是响应任何项目上的点击手势的列表,而是变成了仅响应确定/取消按钮的可滚动列表!
图片:
预期样式(在使用自定义渲染器之前):
意想不到的风格(使用自定义渲染器后):
您的自定义渲染器需要继承自 Xamarin.Forms.Platform.Android.AppCompat.PickerRenderer 而不是 Xamarin.Forms.Platform.Android.PickerRenderer 以获得预期的样式.