我目前正在开发一个聊天程序,当我显示两个人的聊天历史时,我想滚动到垂直堆栈布局的最后一条消息/末尾-->;我用的是.ScrollToAsync功能.
如果单击其中一个用户按钮,则历史记录将从本地存储方法加载.之后,程序为每条消息创建一个标签,并将其添加到可滚动的垂直堆栈布局中.之后,它应该滚动到垂直堆栈布局的末尾.使用以下代码段:
await Scroller.ScrollToAsync(TextField, ScrollToPosition.End, false);
完整方法如下:
private async void OnCounterClicked(object sender, EventArgs e)
{
if (m_currentLabels != null)
{
foreach(Label label in m_currentLabels)
{
TextField.Remove(label);
}
}
m_currentLabels = new List<Label>();
Button button =(Button) sender;
string str = button.Text;
Guid userId = m_userDictionary[str];
List<Guid> guids = new List<Guid>();
guids.Add(userId);
m_currChannelPartners = guids;
List<MessageModel> localMessages = m_eChatBusiness.GetMessages(MessageModel.Yourself.ID, guids);
foreach(MessageModel message in localMessages)
{
Label messageLabel = new Label();
messageLabel.Text = $"{message.Created} {message.Message} | {GetStatus(message)}";
messageLabel.TextColor = Color.Parse("White");
messageLabel.HorizontalTextAlignment = message.Position == "End"? TextAlignment.End:TextAlignment.Start;
m_currentLabels.Add(messageLabel);
TextField.Add(messageLabel);
}
await Scroller.ScrollToAsync(TextField, ScrollToPosition.End, false);
}
Scroller是ScrollView,TextField是垂直堆栈布局.
奇怪的是:当我再次点击按钮时,它就工作了.我试图猜测,但由于我在方法末尾调用了异步函数,TextField是否应该完全初始化?
我希望你能帮助我!