Xamarin.forms 将占位符设置为Xamarin表单中选取项的标题
需要一个自定义选择器,在该选择器中,一旦从选择器中选择一个项目,标题的大小就会减小,如图所示。MaterialisedEntry也会发生同样的情况,但Picker控件需要同样的情况(Xamarin.Forms不允许将自定义视图(如带有stacklayout的ContentView)插入Picker控件)。你可以做的是使用一个网格,其中你有一个堆叠布局覆盖在一个选择器上。根据选择器的SelectedItem属性,您需要更新状态标签的文本Xamarin.forms 将占位符设置为Xamarin表单中选取项的标题,xamarin.forms,picker,Xamarin.forms,Picker,需要一个自定义选择器,在该选择器中,一旦从选择器中选择一个项目,标题的大小就会减小,如图所示。MaterialisedEntry也会发生同样的情况,但Picker控件需要同样的情况(Xamarin.Forms不允许将自定义视图(如带有stacklayout的ContentView)插入Picker控件)。你可以做的是使用一个网格,其中你有一个堆叠布局覆盖在一个选择器上。根据选择器的SelectedItem属性,您需要更新状态标签的文本 <Grid HorizontalOptions="Ce
<Grid HorizontalOptions="Center" VerticalOptions="Center">
<Picker x:Name="picker"
Title="select a state">
<Picker.ItemsSource>
<x:Array Type="{x:Type x:String}">
<x:String>Colorado</x:String>
<x:String>California</x:String>
<x:String>Ohio</x:String>
</x:Array>
</Picker.ItemsSource>
</Picker>
<StackLayout WidthRequest="300" InputTransparent="True" BackgroundColor="White">
<Label Text="State" FontSize="10"/>
<!--Here you would need to bind the Label Text to a property
that changes according to the SelectedItem of the picker-->
<Label Text="Colorado" FontSize="14"/>
</StackLayout>
</Grid>
科罗拉多州
加利福尼亚
俄亥俄州
根据您的描述,我建议您可以使用自定义渲染为选择器控件添加箭头,如下所示:
public class CustomPicker : Picker
{
public static readonly BindableProperty ImageProperty =
BindableProperty.Create(nameof(Image), typeof(string), typeof(CustomPicker), string.Empty);
public string Image
{
get { return (string)GetValue(ImageProperty); }
set { SetValue(ImageProperty, value); }
}
}
<Frame
Padding="8"
BorderColor="Gray"
CornerRadius="20"
HasShadow="True"
IsClippedToBounds="True">
<StackLayout>
<Label
x:Name="label"
FontSize="20"
Text="state" />
<picker:CustomPicker
x:Name="picker1"
Title="select one item"
Image="ic_arrow_drop_down"
SelectedIndexChanged="Picker1_SelectedIndexChanged">
<picker:CustomPicker.Items>
<x:String>1</x:String>
<x:String>2</x:String>
</picker:CustomPicker.Items>
</picker:CustomPicker>
</StackLayout>
</Frame>
private void Picker1_SelectedIndexChanged(object sender, EventArgs e)
{
var picker = sender as CustomPicker;
if(picker.SelectedIndex>-1)
{
label.FontSize = 10;
}
}
[assembly: ExportRenderer(typeof(CustomPicker), typeof(CustomPickerRenderer))]
namespace demo3.Droid
{
public class CustomPickerRenderer : PickerRenderer
{
CustomPicker element;
protected override void OnElementChanged(ElementChangedEventArgs<Picker> e)
{
base.OnElementChanged(e);
element = (CustomPicker)this.Element;
if (Control != null && this.Element != null && !string.IsNullOrEmpty(element.Image))
{
Control.Background = AddPickerStyles(element.Image);
}
}
public LayerDrawable AddPickerStyles(string imagePath)
{
//ShapeDrawable border = new ShapeDrawable();
// border.Paint.Color = Android.Graphics.Color.Gray;
// border.SetPadding(10,10,10,10);
// border.Paint.SetStyle(Paint.Style.Stroke);
//Drawable[] layers = { border , GetDrawable(imagePath) };
Drawable[] layers = { GetDrawable(imagePath) };
LayerDrawable layerDrawable = new LayerDrawable(layers);
layerDrawable.SetLayerInset(0, 0, 0, 0, 0);
return layerDrawable;
}
private BitmapDrawable GetDrawable(string imagePath)
{
int resID = Resources.GetIdentifier(imagePath, "drawable", this.Context.PackageName);
var drawable = ContextCompat.GetDrawable(this.Context, resID);
var bitmap = ((BitmapDrawable)drawable).Bitmap;
var result = new BitmapDrawable(Resources, Bitmap.CreateScaledBitmap(bitmap, 70, 70, true));
result.Gravity = Android.Views.GravityFlags.Right;
return result;
}
}
}
[程序集:ExportRenderer(typeof(CustomPicker)、typeof(CustomPickerRenderer))]
名称空间demo3.Droid
{
公共类CustomPickerRenderer:PickerRenderer
{
客户选择器元件;
受保护的覆盖无效OnElementChanged(ElementChangedEventArgs e)
{
基础。一个要素发生变化(e);
element=(CustomPicker)this.element;
if(Control!=null&&this.Element!=null&&string.IsNullOrEmpty(Element.Image))
{
Control.Background=AddPickerStyles(element.Image);
}
}
公共层可绘制的AddPickerStyles(字符串imagePath)
{
//ShapeDrawable border=新的ShapeDrawable();
//border.Paint.Color=Android.Graphics.Color.Gray;
//边框。设置填充(10,10,10,10);
//边框.Paint.SetStyle(Paint.Style.Stroke);
//Drawable[]层={border,GetDrawable(imagePath)};
Drawable[]层={GetDrawable(imagePath)};
LayerDrawable LayerDrawable=新的LayerDrawable(层);
layerDrawable.SetLayerSet(0,0,0,0,0);
返回层可绘制;
}
私有BitmapDrawable GetDrawable(字符串imagePath)
{
int resID=Resources.GetIdentifier(imagePath,“drawable”,this.Context.PackageName);
var drawable=ContextCompat.GetDrawable(this.Context,resID);
var bitmap=((BitmapDrawable)drawable.bitmap;
var result=新的BitmapDrawable(参考资料,Bitmap.CreateScaledBitmap(Bitmap,70,70,true));
result.Gravity=Android.Views.GravityFlags.Right;
返回结果;
}
}
}
public class CustomPicker : Picker
{
public static readonly BindableProperty ImageProperty =
BindableProperty.Create(nameof(Image), typeof(string), typeof(CustomPicker), string.Empty);
public string Image
{
get { return (string)GetValue(ImageProperty); }
set { SetValue(ImageProperty, value); }
}
}
<Frame
Padding="8"
BorderColor="Gray"
CornerRadius="20"
HasShadow="True"
IsClippedToBounds="True">
<StackLayout>
<Label
x:Name="label"
FontSize="20"
Text="state" />
<picker:CustomPicker
x:Name="picker1"
Title="select one item"
Image="ic_arrow_drop_down"
SelectedIndexChanged="Picker1_SelectedIndexChanged">
<picker:CustomPicker.Items>
<x:String>1</x:String>
<x:String>2</x:String>
</picker:CustomPicker.Items>
</picker:CustomPicker>
</StackLayout>
</Frame>
private void Picker1_SelectedIndexChanged(object sender, EventArgs e)
{
var picker = sender as CustomPicker;
if(picker.SelectedIndex>-1)
{
label.FontSize = 10;
}
}
1.
2.
私有无效选择器1\u SelectedIndexChanged(对象发送方,事件参数e)
{
var picker=发送方作为CustomPicker;
如果(选择器。选择索引>-1)
{
label.FontSize=10;
}
}
这是屏幕截图:
我不太清楚这里的确切问题是什么。如何在pickercontrol中添加“State”文本,以便让picker中有两行?第一个是
状态
,第二个是状态本身?是否有任何理由说明state
不能只是选择器的标签?