我正在做一个Xamarin
项目,我需要能够判断Entry
视图中文本发生的更改是来自代码还是来自UI,这在Xamarin
中可能吗?或者是否有已知的解决方法可以做到这一点。
我知道OnTextChanged
事件,但这只告诉您Text
属性已更改,并允许您访问Text
属性的旧值和新值。它不区分文本更改的不同原因。
您可以从此线程中获得一些想法,检查该条目是否专注于区分文本更改的不同原因:
public MainPage()
{
InitializeComponent();
myEntry.TextChanged += MyEntry_TextChanged;
}
private void MyEntry_TextChanged(object sender, TextChangedEventArgs e)
{
var entry = sender as Entry;
if (entry.IsFocused)
{
//change from UI
Console.WriteLine("change from UI");
}
else{
//change from code
Console.WriteLine("change from code");
}
}
更新:解决op问题的更好方法:
您可以自己设置一个标志,告诉您的代码忽略该事件。例如:
private bool ignoreTextChanged;
private void textNazwa_TextCanged(object sender, EventArgs e)
{
if (ignoreTextChanged) return;
}
创建一个方法并使用它来设置文本,而不仅仅是调用 Text = "...";::
private void SetTextBoxText(TextBox box, string text)
{
ignoreTextChanged = true;
box.Text = text;
ignoreTextChanged = false;
}
引用:忽略文本已更改
您可以使用EntryRenderer 来检测按键事件,并使用该标志通过代码或 UI 检测更改。
步骤如下: - 使用新事件 OnTextChangeByUI 执行您的入口控件 - 为两个平台编写自定义渲染
例如,对于安卓来说,它将是这样的
public class ExtendedEntryRender : EntryRenderer
{
protected override void OnElementPropertyChanged(object sender, PropertyChangedEventArgs e)
{
base.OnElementPropertyChanged(sender, e);
if (Control != null)
{
Control.KeyPress += ((Entry)Element).OnTextChangeByUI;
}
}
}