прокрутка списка wpf и текстовое поле введите ключевое действие - PullRequest
0 голосов
/ 15 мая 2018

Я пытаюсь построить чат для школьного проекта, и у меня было 2 проблемы.

  1. У меня есть список, который содержит и показывает все сообщения, но я не могу сделать так, чтобы он автоматически прокручивался вниз (могу ли я сделать это с помощью xaml?)

    <ListBox ItemsSource="{Binding Messages, Mode=OneWay}"  HorizontalAlignment="Left" Height="494" Margin="255,126,0,0" 
     VerticalAlignment="Top" ScrollViewer.CanContentScroll="True"   Width="416"/>
    
  2. У меня также есть текстовое поле, чтобы написать сообщение, и я хочу отправить сообщение при нажатии клавиши ввода, но сообщение всегда пусто.

     <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 = "";

        }
    }

1 Ответ

0 голосов
/ 15 мая 2018

Трудно сказать, не увидев больше кода, но я подозреваю, что ваши проблемы связаны со следующим:

Сначала вам нужно будет определить, какие события должны вызывать прокрутку списка.После того как вы определили эти события, подпишитесь на них и вызовите событие 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 = "";

    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...