如何在Xamarin.Forms的条目控件中限制输入的长度和字符。是否需要创建自定义控件?有没有一种方法可以从Entry (或另一个控件)派生,这样我就可以对每个平台应用必要的输入限制。
例如,将数值字段限制为最多3个字符,仅限数字。
将Entry控件的Keyboard属性设置为Keyboard.Numeric仅为iOS设置键盘。它不限制实际的文本输入-即我仍然可以输入非数字字符。我也看不到限制参赛作品长度的方法。
发布于 2014-08-04 23:54:58
您可以限制输入字段中的字符数量,如下所示:
int restrictCount = <your restriction length> //Enter your number of character restriction
Entry entry = new Entry();
entry.TextChanged += OnTextChanged;
void OnTextChanged(object sender, EventArgs e)
{
Entry entry = sender as Entry;
String val = entry.Text; //Get Current Text
if(val.Length > restrictCount)//If it is more than your character restriction
{
val = val.Remove(val.Length - 1);// Remove Last character
entry.Text = val; //Set the Old value
}
}发布于 2016-03-14 02:54:46
您可以只使用绑定;例如,我想保存一个不能超过100的付款值。所以我写了一个类
puclic class Payment : INotifyPropertyChanged
{
private int _amountDecimals;
public int AmountDecimals
{
get
{
return _amountDecimals;
}
set
{
if (value <= 100)
{
_amountDecimals = value;
}
OnPropertyChanged();
}
public event PropertyChangedEventHandler PropertyChanged;
protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
}因此,如果用户输入一个值,直到值不超过100,此属性将设置AmountDecimals值
然后只需通过页面构造函数上的代码(或从xaml)设置绑定
var myPayment =new Payment(); //this will hold page(view) data
BindingContext = myPayment;
var paymentEntry = new Entry();
paymentEntry.Keyboard = Keyboard.Numeric;
paymentEntry.SetBinding(Entry.TextProperty, "AmountDecimals"); 因此,用户在条目中输入一个数值,但如果他/她尝试输入一个大于100的值,则绑定只是将其反转为旧值。你可以像这样(在setter上)将你的代码写到你的类的属性中。因此,如果你想让某些属性只包含5个字符,你可以这样写(代码可能是错误的,我没有编译它们:)
private string _name;
public string Name
{
get
{
return _name;
}
set
{
if ((value!= null && value.length <= 5) || value == null)
{
_name = value;
}
OnPropertyChanged();
}发布于 2015-06-24 03:54:50
我使用了一个自定义entry控件,该控件具有大写和最大长度的Bindable属性。
控件(MyEntry.cs)
class NewPaymentEntry : Entry
{
public NewPaymentEntry()
{
base.TextChanged += EditText;
}
public void EditText(object sender, TextChangedEventArgs args)
{
Entry e = sender as Entry;
String val = e.Text;
if (string.IsNullOrEmpty(val))
return;
if (Uppercase )
val = val.ToUpper();
if(MaxLength > 0 && val.Length > MaxLength)
{
val = val.Remove(val.Length - 1);
}
e.Text = val;
}
public static readonly BindableProperty UppercaseProperty = BindableProperty.Create<MyEntry, bool>(p => p.Uppercase, false);
public bool Uppercase
{
get
{
return (bool)GetValue(UppercaseProperty);
}
set
{
SetValue(UppercaseProperty, value);
}
}
public static readonly BindableProperty MaxLengthProperty = BindableProperty.Create<MyEntry, int>(p => p.MaxLength, 0);
public int MaxLength
{
get
{
return (int)GetValue(MaxLengthProperty);
}
set
{
SetValue(MaxLengthProperty, value);
}
}
}从xaml调用它,比如
<MyEntry Text="{Binding MyBindingProp}"
Uppercase="True"
MaxLength="11"/>https://stackoverflow.com/questions/25086881
复制相似问题