【发布时间】:2018-01-26 18:02:58
【问题描述】:
我是 Xamrin.Forms 编程的新手。我想自定义“选择器”视图控件。上图中有:
-带有文本“选择”的按钮(单击时调用 picker.Focus()),
-选择按钮后面有黑色背景和文本颜色的选择器,
-空列表视图,
- 选择器选项轮窗格,弹出拾取器'聚焦'
如何,a) 将滚轮窗格移动到空白 ListView,或者,b) 加长滚轮窗格的高度(以覆盖更多屏幕)? PS示例:
Picker 渲染器实现代码,就像现在一样(由@Land 提供):
[assembly: ExportRenderer(typeof(MyPicker), typeof(MyPickerRenderer))]
namespace AppName.iOS
{
public class MyPickerRenderer : PickerRenderer
{
protected override void OnElementChanged(ElementChangedEventArgs<Picker> e)
{
base.OnElementChanged(e);
UITextField textField = Control;
UIPickerView pickerView = textField.InputView as UIPickerView;
Picker myPicker = Element;
List<string> itemList;
itemList = myPicker.Items.ToList();
pickerView.Delegate = new MyPickerViewDelegate(itemList);
}
}
public class MyPickerViewDelegate : UIPickerViewDelegate
{
List<string> itemList;
public MyPickerViewDelegate(List<string> list)
{
itemList = list;
}
//Define the Font size or style
public override NSAttributedString GetAttributedTitle(UIPickerView pickerView, nint row, nint component)
{
var text = new NSAttributedString(
itemList[(int)row],
font: UIFont.SystemFontOfSize(12),
foregroundColor: UIColor.Black,
strokeWidth: 1
);
return text;
}
//Define the row height
public override nfloat GetRowHeight(UIPickerView pickerView, nint component)
{
return 20;
}
//Customize more flexible (including placement) use following method:
public override UIView GetView(UIPickerView pickerView, nint row, nint component, UIView view)
{
UIView contentView = new UIView(new CGRect(
0, 0, UIScreen.MainScreen.Bounds.Size.Width, UIScreen.MainScreen.Bounds.Size.Height));
UILabel label = new UILabel();
label.Frame = contentView.Bounds;
contentView.AddSubview(label);
label.Text = itemList[(int)row];
//Change the label style
label.Font = UIFont.SystemFontOfSize(12);
label.TextColor = UIColor.Black;
label.TextAlignment = UIKit.UITextAlignment.Center;
return contentView;
}
}
}
【问题讨论】:
标签: c# ios xamarin.forms uipickerview