xamarin表单自定义渲染选择器
我创建了一个自定义选择器,以便有一个控件,该控件具有一个具有厚度的框架、一个清除按钮和一个箭头按钮xamarin表单自定义渲染选择器,xamarin,xamarin.forms,picker,renderer,Xamarin,Xamarin.forms,Picker,Renderer,我创建了一个自定义选择器,以便有一个控件,该控件具有一个具有厚度的框架、一个清除按钮和一个箭头按钮 public类BorderlessPicker:Picker { 公共静态BindableProperty CornerRadiusProperty= 创建(nameof(CornerRadius)、typeof(int)、typeof(BorderlessPicker)、0); 公共静态BindableProperty BorderThicknessProperty= 创建(nameof(Bo
public类BorderlessPicker:Picker
{
公共静态BindableProperty CornerRadiusProperty=
创建(nameof(CornerRadius)、typeof(int)、typeof(BorderlessPicker)、0);
公共静态BindableProperty BorderThicknessProperty=
创建(nameof(BorderThickness)、typeof(int)、typeof(BorderlessPicker)、0);
公共静态BindableProperty PaddingProperty=
创建(nameof(Padding)、typeof(Thickness)、typeof(BorderlessPicker)、newthickness(5));
公共静态BindableProperty BorderColorProperty=
创建(nameof(BorderColor)、typeof(Color)、typeof(BorderlessPicker)、Color.Transparent);
公共静态只读BindableProperty ImageProperty=
创建(nameof(Image)、typeof(string)、typeof(BorderlessPicker)、string.Empty);
公共字符串图像
{
获取{return(string)GetValue(ImageProperty);}
set{SetValue(ImageProperty,value);}
}
公共半径
{
get=>(int)GetValue(CornerRadiusProperty);
set=>SetValue(CornerRadiusProperty,值);
}
公共int边界厚度
{
get=>(int)GetValue(BorderThicknessProperty);
set=>SetValue(BorderThicknessProperty,value);
}
公共颜色边框颜色
{
get=>(颜色)GetValue(BorderColorProperty);
set=>SetValue(BorderColorProperty,value);
}
///
///无法在iOS运行时更改此属性。
///
公共厚度填料
{
get=>(厚度)GetValue(填充属性);
set=>SetValue(PaddingProperty,value);
}
公共边界Spicker()
{
this.BackgroundColor=Color.Transparent;
}
}
自定义渲染器以清除背景:
public class BorderlessPickerRenderer : PickerRenderer
{
public BorderlessPickerRenderer(Context context) : base(context)
{
}
protected override void OnElementChanged(ElementChangedEventArgs<Picker> e)
{
base.OnElementChanged(e);
if (e.OldElement == null)
{
Control.Background = null;
}
}
}
公共类无边框SpickerEnder:PickerEnder
{
公共无边框SpickerEnder(上下文):基础(上下文)
{
}
受保护的覆盖无效OnElementChanged(ElementChangedEventArgs e)
{
基础。一个要素发生变化(e);
if(e.OldElement==null)
{
Control.Background=null;
}
}
}
当我打开选择器时,我会得到一个“半屏幕”列表,其中大部分项目都隐藏在用户面前。
大概是这样的:
我想要的是,当我打开选择器时,我会得到默认的“全屏”:
可能吗?一切皆有可能,但定制意味着更多的工作 在Android上,
Picker
基于Android的Picker
控件,在iOS上,它是UIPickerView
和UITextField
链接在一起的组合
因此,如果您想更改当前的选择器
,它将受到这些底层控件可能的限制。你的要求在这方面是不可能的
但是,没有人阻止您使用按钮(或其他控件)打开全屏弹出窗口,您可以在其中选择值。一切都是可能的,但定制意味着更多的工作 在Android上,
Picker
基于Android的Picker
控件,在iOS上,它是UIPickerView
和UITextField
链接在一起的组合
因此,如果您想更改当前的选择器
,它将受到这些底层控件可能的限制。你的要求在这方面是不可能的
但是,没有人阻止您使用按钮(或其他控件)打开全屏弹出窗口,您可以在其中拾取值。您必须使用AppCompact PickerRenderer
public class BorderlessPickerRenderer : Xamarin.Forms.Platform.Android.AppCompat.PickerRenderer
{
public BorderlessPickerRenderer(Context context) : base(context)
{
}
protected override void OnElementChanged(ElementChangedEventArgs<Picker> e)
{
base.OnElementChanged(e);
Control.Background = null;
}
}
公共类无边框SpickerEnder:Xamarin.Forms.Platform.Android.AppCompat.PickerEnder
{
公共无边框SpickerEnder(上下文):基础(上下文)
{
}
受保护的覆盖无效OnElementChanged(ElementChangedEventArgs e)
{
基础。一个要素发生变化(e);
Control.Background=null;
}
}
您必须使用AppCompact PickerRenderer
public class BorderlessPickerRenderer : Xamarin.Forms.Platform.Android.AppCompat.PickerRenderer
{
public BorderlessPickerRenderer(Context context) : base(context)
{
}
protected override void OnElementChanged(ElementChangedEventArgs<Picker> e)
{
base.OnElementChanged(e);
Control.Background = null;
}
}
公共类无边框SpickerEnder:Xamarin.Forms.Platform.Android.AppCompat.PickerEnder
{
公共无边框SpickerEnder(上下文):基础(上下文)
{
}
受保护的覆盖无效OnElementChanged(ElementChangedEventArgs e)
{
基础。一个要素发生变化(e);
Control.Background=null;
}
}
请接受答案,如果有效请投票请接受答案,如果有效请投票