C# 应用渲染器时选择器布局已更改

C# 应用渲染器时选择器布局已更改,c#,xamarin,xamarin.forms,custom-renderer,C#,Xamarin,Xamarin.forms,Custom Renderer,为什么在应用自定义渲染器时Picker的布局会发生如此大的变化 应用渲染器后的布局: 如何保留原始布局,但应用自定义渲染器 确认按钮也不再出现了。它们是白色的,如果您单击它们应该在的位置,它们将工作 自定义渲染器: public class MyPickerRenderer : PickerRenderer { protected override void OnElementChanged(ElementChangedEventArgs<Picker> e) {

为什么在应用自定义渲染器时Picker的布局会发生如此大的变化

应用渲染器后的布局:

如何保留原始布局,但应用自定义渲染器

确认按钮也不再出现了。它们是白色的,如果您单击它们应该在的位置,它们将工作

自定义渲染器:

public class MyPickerRenderer : PickerRenderer
{
    protected override void OnElementChanged(ElementChangedEventArgs<Picker> e)
    {
        base.OnElementChanged(e);

        if (Control != null)
        {
            var spinner = new Spinner(this.Context);

            Control.SetBackgroundColor(Color.Transparent.ToAndroid());
            Control.InputType = InputTypes.TextFlagNoSuggestions;
            Control.SetTextColor(Color.Red.ToAndroid());

            spinner.SetBackgroundColor(Color.Red.ToAndroid());
        }
    }
}
公共类MyPickerRenderer:PickerRenderer
{
受保护的覆盖无效OnElementChanged(ElementChangedEventArgs e)
{
基础。一个要素发生变化(e);
if(控件!=null)
{
var微调器=新微调器(this.Context);
Control.SetBackgroundColor(Color.Transparent.ToAndroid());
Control.InputType=InputTypes.TextFlagNoSuggestions;
Control.SetTextColor(Color.Red.ToAndroid());
spinner.SetBackgroundColor(Color.Red.ToAndroid());
}
}
}

我也遇到了同样的问题,并发现解决方案如下: 确保您使用的是Xamarin.Forms.Platform.Android.AppCompat.PickerRenderer而不是 Xamarin.Forms.Platform.Android.PickerRenderer

回答如下:

我们需要查看rederer的源代码来帮助它。@Diegrafaelsouza重新加载是否继承XF默认PickerRenderer构造函数?@Diegrafaelsouza是的,请重新加载。在其源代码上,视图在
OnClick
方法中设置选择器的布局,该方法由
OnFocusChangeRequested
方法调用,但这是内在的。。。看看这个,也许它能帮你。我看不出任何解释