我有一个应用程序,其中使用Xamarin Entry字段来输入数字。这是我编码的内容:
<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方法中放置一个断点时,它永远不会被调用。
有人能指出我可能出错的地方。
答案 0 :(得分:2)
只有在文本更新完成后,才能扩展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"/>
答案 1 :(得分:1)
只有在用户按下返回按钮时才会调用completed
事件。例如,iOS软键盘上的蓝色完成按钮。
您可能希望查看TextChanged
事件。
答案 2 :(得分:1)
completed
。
当我们点击键盘上的Enter
时,它可以在PC上的触发器上触发,但是,当在真实设备上运行时,没有像完成或返回的按钮在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
,并在其中运行db。当然我们可以在SharadaGururaj的答案中采用解决方案,它更具可控性和灵活性。