【发布时间】:2020-11-27 21:20:44
【问题描述】:
在我的 Xamarin 应用程序中,我希望在条目中输入值时,它会自动查找下一个条目字段并将焦点设置为它。
我可以使用键盘上的下一步按钮移至下一个条目,但我想在输入值时自动将焦点设置在下一个条目上(最大长度为 1 个字符)。
我也试过this code,但没用。
.xml
xmlns:behaviors="clr-namespace:Mobile.App.Behaviors"
<Grid Grid.Column="1">
<Frame CornerRadius="12">
<BoxView Color="#EEEEEE" />
</Frame>
<Entry
x:Name="PasswordOne"
Text="{Binding PasswordOne}"
IsPassword="True"
Keyboard="Numeric"
MaxLength="1"
ReturnType="Next"
Unfocused="Password_Unfocused">
<Entry.Behaviors>
<behaviors:FocusOnReturnBehavior FocusOn="{x:Reference PasswordTwo}" />
</Entry.Behaviors>
</Entry>
</Grid>
<Grid Grid.Column="2">
<Frame CornerRadius="12">
<BoxView Color="#EEEEEE" />
</Frame>
<Entry
x:Name="PasswordTwo"
Text="{Binding PasswordTwo}"
IsPassword="True"
Keyboard="Numeric"
MaxLength="1"
ReturnType="Next"
Unfocused="Password_Unfocused">
<Entry.Behaviors>
<behaviors:FocusOnReturnBehavior FocusOn="{x:Reference PasswordThree}" />
</Entry.Behaviors>
</Entry>
</Grid>
FocusOnReturnBehavior.cs
public class FocusOnReturnBehavior : Behavior<Entry>
{
public VisualElement FocusOn { get; set; }
protected override void OnAttachedTo(Entry bindable)
{
base.OnAttachedTo(bindable);
bindable.Completed += BindableOnCompleted;
}
protected override void OnDetachingFrom(Entry bindable)
{
base.OnDetachingFrom(bindable);
bindable.Completed -= BindableOnCompleted;
}
private void BindableOnCompleted(object sender, EventArgs args)
{
FocusOn?.Focus();
}
}
【问题讨论】:
-
您尝试过调试它吗?你的行为有依恋吗?是否分配了事件?处理程序是否被调用?
-
我用@FabriBertani 更新了行为并对其进行了调试。
OnAttachedTo()在我从页面导航到 PasswordPage 时触发,但在 PasswordPage 中使用Entry时,未触发行为(断点) ..
标签: c# .net xamarin xamarin.forms