这可以通过使用FindByName<>()
PCL 中的函数轻松实现。
这是这样做的一种方法:
Entry myEntry = CurrentPage.FindByName<Entry>("YourEntryName");
myEntry.Focus();
您可以将其添加到发送按钮的单击处理程序的末尾。
编辑:
在您的情况下,我认为您的问题是您的条目设置为private
,因此我建议将其公开为public
或使用另一个公共属性公开。两种可能有效的解决方案:
public EntrySetBorder _newMessageEntry;
...
_newMessageEntry = new EntrySetBorder
{
TextColor = Color.Black,
HorizontalOptions = LayoutOptions.FillAndExpand,
VerticalOptions = LayoutOptions.End,
Margin = new Thickness(0, 0, 5, 0)
};
和:
EntrySetBorder entry = CurrentPage.FindByName<EntrySetBorder>("_newMessageEntry");
entry.Focus();
或者你可以这样做:
private EntrySetBorder _newMessageEntry;
...
_newMessageEntry = new EntrySetBorder
{
TextColor = Color.Black,
HorizontalOptions = LayoutOptions.FillAndExpand,
VerticalOptions = LayoutOptions.End,
Margin = new Thickness(0, 0, 5, 0)
};
public EntrySetBorder NewMessageEntry => _newMessageEntry;
和 :
EntrySetBorder entry = CurrentPage.FindByName<EntrySetBorder>("NewMessageEntry");
entry.Focus();
请尝试:)
编辑2:
在检查了您的代码并对其进行测试后,修复它的最后一种方法是将条目作为您正在使用的命令中的参数发送,例如:
在您正在创建的页面内:
sendButton.CommandParameter = NewMessageEntry; // We're adding the Entry we want to focus as a command parameter.
在您的 PageModel 和我们要使用的命令中:
public Command SendCommand
{
get
{
return new Command<Entry>((obj) => //obj here means the parameters we're sending I.E: the entry we set it in the page.
{
//The code you want to execute
Entry entry = obj;
entry.Focus();
});
}
}
请注意,我之所以使用Entry
,是因为我没有您的自定义条目的所有实现。