我编写了一个非常简单的Xamarin Forms Behavior来设置Entry的最大长度。但是,它没有附加。 OnAttach代码不会执行。这是我写的第一个行为。
我有一个OnAttachedTo和OnDetachedFrom。
public class MaxLengthBehavior : Behavior<Entry>
{
public static readonly BindableProperty MaxLengthProperty = BindableProperty.Create("MaxLength", typeof(int), typeof(MaxLengthBehavior), 0);
public int MaxLength
{
get { return (int)GetValue(MaxLengthProperty); }
set { SetValue(MaxLengthProperty, value); }
}
private void bindable_TextChanged(object sender, TextChangedEventArgs e)
{
if (e.NewTextValue.Length >= MaxLength)
((Entry)sender).Text = e.NewTextValue.Substring(0, MaxLength);
}
protected override void OnAttachedTo(Entry bindable)
{
bindable.TextChanged += bindable_TextChanged;
}
protected override void OnDetachingFrom(Entry bindable)
{
bindable.TextChanged -= bindable_TextChanged;
}
}
我使用Xaml附加到条目。
<Entry x:Name="entryName" Margin="35, 20, 35, 9"
Placeholder="What's your name?"
Text="{Binding Name}">
<Entry.Behaviors>
<b:MaxLengthBehavior MaxLength="22" />
</Entry.Behaviors>
</Entry>
我确信我一定做错了。但是,我没有看到它。
感谢。
答案 0 :(得分:0)
我会发布我使用的内容,也许会有所帮助。这至少对我有用。主要区别在于MaxLength不是BindableProperty。
public class EntryLengthValidatorBehavior : Behavior<Entry>
{
public int MaxLength { get; set; }
protected override void OnAttachedTo(Entry bindable)
{
base.OnAttachedTo(bindable);
bindable.TextChanged += OnEntryTextChanged;
}
protected override void OnDetachingFrom(Entry bindable)
{
base.OnDetachingFrom(bindable);
bindable.TextChanged -= OnEntryTextChanged;
}
void OnEntryTextChanged(object sender, TextChangedEventArgs e)
{
var entry = (Entry)sender;
// if Entry text is longer then valid length
if (entry.Text?.Length > this.MaxLength)
{
string entryText = entry.Text;
entryText = entryText.Remove(entryText.Length - 1); // remove last char
entry.Text = entryText;
}
}
}
和用法
<Entry Text="{Binding VatNumber}">
<Entry.Behaviors>
<behaviors:EntryLengthValidatorBehavior MaxLength="14" />
</Entry.Behaviors>
</Entry>
答案 1 :(得分:0)
事实证明,这是VS for Mac的构建问题。我没有关闭VS或项目几天。关闭并重新打开VS for Mac修复了该问题。我真的开始不喜欢VS for Mac了。对于不仅仅是演示应用程序的解决方案,我感到非常奇怪。