wpf listbox scroll и текстовое поле введите ключевое действие

83
11

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

У меня есть список, содержащий и показывающий все сообщения, но я не могу заставить его автоматически прокручивать (я могу сделать это с помощью 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 = "";

}
}

спросил(а) 2018-05-15T15:19:00+03:00 2 года, 5 месяцев назад
1
Решение
115

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

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

}
}

ответил(а) 2018-05-15T19:26:00+03:00 2 года, 5 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема