我想将焦点从一个条目切换到另一个条目。
一开始,我用Focus()方法修改了所有条目,但我认为这不是好代码,因为条目越多,编辑起来就越困难。
我在这里找到了引用https://adenearnshaw.com/focus-next-element-on-enter/
一是创造行为
public class SetFocusOnEntryCompletedBehavior : Behavior
{
public static readonly BindableProperty TargetElementProperty
= BindableProperty.Create(nameof(TargetElement), typeof(VisualElement), typeof(SetFocusOnEntryCompletedBehavior));
public VisualElement TargetElement
{
get => (VisualElement)GetValue(TargetElementProperty);
set => SetValue(TargetElementProperty, value);
}
protected override void OnAttachedTo(BindableObject bindable)
{
base.OnAttachedTo(bindable);
if (bindable is Entry entry)
entry.Completed += Entry_Completed;
}
protected override void OnDetachingFrom(BindableObject bindable)
{
if (bindable is Entry entry)
entry.Completed -= Entry_Completed;
base.OnDetachingFrom(bindable);
}
private void Entry_Completed(object sender, EventArgs e)
{
TargetElement?.Focus();
}
}
接下来,在xaml中实现
<ContentPage x:Class="NextFormFieldSample.Forms.MainPage"
xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:behaviors="clr-namespace:NextFormFieldSample.Forms.Behaviors">
<StackLayout Margin="20">
<Entry Placeholder="Field 1">
<Entry.Behaviors>
<behaviors:SetFocusOnEntryCompletedBehavior TargetElement="{x:Reference Entry2}" />
</Entry.Behaviors>
</Entry>
<Entry x:Name="Entry2" Placeholder="Field 2"/>
</StackLayout>
</ContentPage>
但是!!!!我必须为使用这个再加一件事。
我必须在输入完成事件后接收结果;如果结果为真,则焦点改变,否则焦点再次停留。
我试着做出一些行为,但这对我来说很难。
有人能帮帮我吗?
1条答案
按热度按时间vyu0f0g11#
也就是说,对于数据库中的某个结果,如果结果为真,则改变焦点,如果结果为假,则焦点停留在同一个条目上,不仅改变条目的焦点,而且观察数据库中的结果。
然后,您可以为事件
Entry_Completed
添加一些逻辑判断。请参考以下代码:
您的页面中的事件
Entry_Completed
. xaml.cs