我正在为学校项目建立一个聊天室,我有两个问题。
我有一个列表框,其中包含并显示所有消息,但我无法自动向下滚动。(我可以使用xaml
吗?)
<ListBox ItemsSource="{Binding Messages, Mode=OneWay}" HorizontalAlignment="Left" Height="494" Margin="255,126,0,0"
VerticalAlignment="Top" ScrollViewer.CanContentScroll="True" Width="416"/>
我还有一个文本框来写一条消息,我想发送 按下输入时的消息,但消息始终为空。
<TextBox Text="{Binding MsgToSend, Mode=TwoWay}" HorizontalAlignment="Left"
Height="65" Margin="60,625,0,0" TextWrapping="Wrap"
VerticalAlignment="Top" Width="520" FontSize="20"
TextChanged="TextBox_TextChanged" KeyDown="sendbyenter"/>
代码背后
private void sendbyenter(object sender, KeyEventArgs e)
{
if (e.Key.Equals(Key.Enter))
string message = Observable.MsgToSend;
try
{
Observable.mychatroom.sendMessage(Observable.MsgToSend);
Observable.Messages.Add(Observable.MsgToSend);
Observable.MsgToSend = "";
}
}
答案 0 :(得分:0)
如果没有看到更多代码,很难分辨,但我怀疑你的问题在于:
首先,您需要确定哪些事件会导致列表框滚动。确定这些事件后,请订阅这些事件并从后面的代码中调用ScrollIntoView
中的ListBox
事件。这可能只是在处理传入和传出消息的事件中完成。实施例。
myListBox.ScrollIntoView(Observable.Messages[Observable.Message.Last-1]);
我不知道您的Observable
课程的结构如何,因此您可能需要调整ScrollIntoView
事件中传递的内容。您的目标是传递添加到集合中的最新消息。此外,您需要为ListBox
命名,以便从代码隐藏中访问它。
其次,您的消息始终为空,因为您的Observable
类很可能是可变的。您将MsgToSend
添加到集合中,然后将其值重置为空。重置该值时,您还要重置添加到集合中的值。通过message
代替Observable.MsgToSend
。
private void sendbyenter(object sender, KeyEventArgs e)
{
if (e.Key.Equals(Key.Enter))
string message = Observable.MsgToSend;
try
{
Observable.mychatroom.sendMessage(message);
Observable.Messages.Add(message);
Observable.MsgToSend = "";
}
}