我有一个应用程序,其中使用Xamarin输入字段来允许输入数字。这是我编码的内容:
<Entry
Keyboard="Numeric"
x:Name="dBtnPts"
VerticalOptions="Center" HorizontalOptions="End" HorizontalTextAlignment="End"
TextColor="Gray" Completed="dBtnPtsChanged"
WidthRequest="55"/>
void dBtnPtsChanged(object sender, EventArgs e)
{
App.DB.UpdateStringSetting(Settings.ABtnPoints, ((Entry)sender).Text);
}
当我在 dBtnPtsChanged 方法中放置一个断点时,它永远不会被调用。
有人可以指出我可能出错的地方吗?
您可以扩展Entry
以仅在文本更新完成后调用事件;例如:
public class CustomEntry : Entry
{
public event EventHandler TextUpdated;
private bool _isDirty = false;
public CustomEntry()
{
Completed += CustomEntry_Completed;
Unfocused += CustomEntry_Unfocused;
TextChanged += CustomEntry_TextChanged;
}
private void CustomEntry_TextChanged(object sender, TextChangedEventArgs e)
{
_isDirty = true;
}
private void CustomEntry_Unfocused(object sender, FocusEventArgs e)
{
if (_isDirty)
{
_isDirty = false;
TextUpdated?.Invoke(this, EventArgs.Empty);
}
}
private void CustomEntry_Completed(object sender, EventArgs e)
{
if (_isDirty)
{
_isDirty = false;
TextUpdated?.Invoke(this, EventArgs.Empty);
}
}
}
示例用法如下所示:
<local:CustomEntry
Keyboard="Numeric"
x:Name="dBtnPts"
VerticalOptions="Center" HorizontalOptions="End"
HorizontalTextAlignment="End"
TextColor="Gray" TextUpdated="dBtnPtsChanged"
WidthRequest="55"/>
单击"完成"按钮时会出现completed
。
当我们单击键盘上的Enter
时,它可以在PC上的sumilator上触发,但是,当在真实设备上运行时,在Xamarin.forms的键盘中没有">完成">或"返回"之类的按钮。
因此,作为临时解决方案,我们可以将tap事件添加到条目的父布局中。
XMAL中的代码:
<StackLayout >
<StackLayout.GestureRecognizers>
<TapGestureRecognizer Tapped = "Handle_Tapped" />
</StackLayout.GestureRecognizers>
<Entry Keyboard="Numeric"
x:Name="dBtnPts"
VerticalOptions="Center"
HorizontalOptions="End"
HorizontalTextAlignment="End"
TextColor="Gray"
Completed = "Handle_Completed"
WidthRequest="55"/>
</StackLayout>
代码隐藏:
void Handle_Tapped(object sender, System.EventArgs e)
{
App.DB.UpdateStringSetting(Settings.ABtnPoints, ((Entry)dBtnPts).Text);
}
更新:
正如SharadaGururaj所建议的那样,一种更好和简单的方法是分配Entry的事件Unfocused
,并在其内部操作数据库。当然,我们可以采用沙拉达古鲁拉杰的答案中的解决方案,它更具可控性和灵活性。
仅在用户按下返回按钮时调用completed
事件。例如,iOS 软键盘上的蓝色"完成"按钮。
您可能想查看TextChanged
事件。