我在使用 RichTextBox 时遇到一个小问题。
我正在尝试进行某种聊天,包括每行使用不同的颜色,这就是为什么我使用 RichTextBox 而不是普通的聊天框。但我在换行方面遇到了一些麻烦。
我的目标是实现这种格式:
Player 1: Hello world!
System Bot: The game has begun!
Player 2: sup man?
Player 1: Nothing
Run Code Online (Sandbox Code Playgroud)
不幸的是,我的代码到目前为止还没有完成它的工作:
public void Handle(NewMessageMessage message)
{
var messageStr = message.Message;
var range = new TextRange(ChatMessages.ContentEnd, ChatMessages.ContentEnd);
switch (message.Type)
{
case MessageType.SystemInformation:
range.Text = string.Concat("System-Bot: ", messageStr, "\r\n");
range.ApplyPropertyValue(TextElement.ForegroundProperty, new SolidColorBrush(Color.FromArgb(255, 255, 150, 0)));
break;
case MessageType.SystemWarning:
range.Text = string.Concat("System-Bot: ", messageStr, "\r\n");
range.ApplyPropertyValue(TextElement.ForegroundProperty, Brushes.Red);
break;
case MessageType.PlayerMessage:
range.Text = string.Concat(messageStr, "\r\n");
range.ApplyPropertyValue(TextElement.ForegroundProperty, Brushes.Blue);
break;
}
NotifyOfPropertyChange(() => ChatMessages);
TriggerScrollViewerScroll = true;
}
Run Code Online (Sandbox Code Playgroud)
该代码没有给我预期的结果:
Player 1: Hello world!System Bot: The game has begun!
Player 2: sup man?
Player 1: Nothing
Run Code Online (Sandbox Code Playgroud)
省略 \r\n 给我这个:
Player 1: Hello world!System Bot: The game has begun!Player 2: sup man?Player 1: Nothing
Run Code Online (Sandbox Code Playgroud)
我的 RichTextBox 看起来像这样:
<controls:ChatRichTextBox Document="{Binding ChatMessages}" IsReadOnly="True" Margin="5"/>
Run Code Online (Sandbox Code Playgroud)
有人知道那里发生了什么事吗?
您可以使用“\r”代替“\r\n”。
问题在于“\r\n”,它表示一个新段落。默认情况下,RichTextBox 中的段落有边距。如果将段落的边距设置为 0,则“\r\n”将起作用(或者 Environment.NewLine 也将起作用)。在 xaml 中设置边距,如下所示:
<Window.Resources>
<Style TargetType="{x:Type Paragraph}">
<Setter Property="Margin"
Value="0" />
</Style>
</Window.Resources>
Run Code Online (Sandbox Code Playgroud)