2015-09-05 2 views
3

Я пытаюсь создать окно чата, такое как IRC, в котором содержимое отображается снизу вверх, так же как и любое окно чата, когда-либо создаваемое.Текст WPF RichTextBox снизу

Это моя XAML, ничего фантазии об этом

<Window 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:ee="http://schemas.microsoft.com/expression/2010/effects" xmlns:ed="http://schemas.microsoft.com/expression/2010/drawing" x:Class="TestChat.Chat" 
    Title="Chat" Height="700" Width="400" WindowStyle="ThreeDBorderWindow" ResizeMode="CanMinimize"> 

    <Grid> 
     <RichTextBox x:Name="txtChat" HorizontalAlignment="Left" Height="644" Margin="0,10,0,0" VerticalAlignment="Top" Width="388" VerticalScrollBarVisibility="Auto"> 
      <FlowDocument /> 
     </RichTextBox> 
    </Grid> 
</Window> 

И у меня есть BackgroundWorker добавление текста к нему

private void SendWorkerComplete(object s, ProgressChangedEventArgs args) 
{ 
    txtChat.AppendText(args.UserState.ToString()); 
    txtChat.ScrollToEnd(); 
} 

private void SendWorker_DoWork(object sender, DoWorkEventArgs e) 
{ 
    SendWorker.ReportProgress(0, (string)e.Argument); 
} 

Свойство VerticalContentAlignment устанавливается в нижней части не оказывает содержимое таким образом, как это можно сделать? есть ли для этого свойство или это нужно делать программным путем?

+0

Вот аналогичное требование. Не точно, как вы указали, но это может сработать для вас: http://stackoverflow.com/questions/10308475/how-can-i-make-a-richtextbox-scroll-to-the-end-wheni-i- add-a-new-line – JamieMeyer

+0

Это только свиток вниз, но если richtextbox пуст, нет смысла воспроизводить это поведение, я думаю, я мог бы добавить пустую строку и прокрутить до конца, прежде чем добавлять к ней вывод для воспроизведения это, но я искал более элегантный способ сделать это, спасибо в любом случае – FuuRe

+0

Не могли бы вы показать нам xaml, который вы используете? – StillLearnin

ответ

-1

вы установили запас налево до 545, который идет богатый текстовый блок из окна изменения кода на что-то, как это показывает ваше управление на нижней части окна:

<RichTextBox x:Name="txtChat" HorizontalAlignment="Stretch" Height="42" VerticalAlignment="Bottom" Width="auto" VerticalScrollBarVisibility="Auto" Background="Yellow"> 
     <FlowDocument /> 
</RichTextBox> 
+0

Это не решает проблему. – StillLearnin

0

Почему заморачиваться с RichTextBox? Просто используйте обычный TextBox.

<Grid> 
    <TextBox x:Name="txtChat" VerticalScrollBarVisibility="Auto" Margin="10" Text="Hello" VerticalContentAlignment="Bottom" /> 
</Grid> 
+0

Это чат, поэтому у него должны быть смайлики, разные размеры шрифтов, стили, цвета ... вы получаете идею – FuuRe

+1

@FuuRe Ah! Понимаю. Я предположил, что вы идете только с простым текстовым интерфейсом, потому что, если бы я это делал, и мне хотелось обрабатывать смайлики с фантазией стиля и т. Д., Я определенно не использовал бы richtextbox. Сначала я создал класс сообщений со всеми его связанными свойствами (отправитель, сообщение и т. Д.), А затем создавал пользовательский элемент управления xaml для представления объекта сообщения. Каждый раз, когда приходит сообщение, создайте новый объект сообщения и добавьте его в коллекцию. Привяжите список к этой коллекции, когда шаблон элемента списка является вашим настраиваемым элементом управления xaml. – StillLearnin

Смежные вопросы