是否可以判断条目上的文本更改是来自代码还是来自 UI?



我正在做一个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;

}
}
}

相关内容

  • 没有找到相关文章

最新更新