我在xaml中有一个条目,如下所示:
<Entry x:name="userNameEntry" Placeholder="Name"/>
在我的 xaml.cs 文件中,我在页面的构造函数中编写了以下代码:
userNameEntry.Focused += (sender, e) =>
{
userNameEntry.Placeholder = "";
}
每当我点击输入字段时,占位符文本都会被替换,但不显示键盘。我必须再次点击才能调出键盘。
如何更换占位符并显示键盘?
我认为这里发生的事情是一种竞争条件。所以我认为你需要从 Xaml 实现 onFocus 事件并从后面的代码中处理它。
<Entry x:name="userNameEntry" Placeholder="Name" Focused="userNameEntry_OnFocused"/>
并在代码隐藏中
private void userNameEntry_OnFocused(object sender, FocusEventArgs e)
{
userNameEntry.Placeholder = "";
}
如果它能:)工作,请尝试一下虽然我自己我不会在用户开始输入之前删除占位符,因为那样它只会起作用.
我可以重现你找到的场景。通过检查 xamarin 表单源代码的 EntryRenderer,我们可以发现
_textView.Hint = Element.Placeholder;
Hint
属性来自安卓原生EditText
,渲染器目标对象是继承自安卓原生EditText
的EntryEditText。
所以我创建了一个 xamarin android 项目,并使用带有提示的 EditText 作为以下代码:
public class MainActivity : Activity
{
EditText et;
protected override void OnCreate(Bundle bundle)
{
base.OnCreate(bundle);
// Set our view from the "main" layout resource
SetContentView (Resource.Layout.Main);
et = (EditText)FindViewById(Resource.Id.edittext);
et.Click += Et_Click;
}
private void Et_Click(object sender, System.EventArgs e)
{
et.Hint = "";
}
}
当我单击编辑文本时,键盘显示,同时提示消失了。
我还创建了条目的客户呈现器,如以下代码:
可移植代码
public class MyEditText : View
{
}
安卓项目代码
public class MyEditTestRenderer : ViewRenderer<MyEditText, EditText>,Android.Views.View.IOnClickListener
{
EditText et;
protected override void OnElementChanged(ElementChangedEventArgs<MyEditText> e)
{
base.OnElementChanged(e);
if (e.OldElement == null)
{
// perform initial setup
et = new EditText(this.Context);
SetNativeControl(et);
}
et.Click += Et_Click;
et.Hint = "name";
// et.SetOnClickListener(this);
}
private void Et_Click(object sender, EventArgs e)
{
et.Hint = "";
}
}
但是当我第一次点击EditText
时,它无法检测到点击事件。当我第二次单击EditText
时,Hint
消失了。
您可以将此问题报告给 https://bugzilla.xamarin.com/