我对RichTextBox控件的问题在于它切断了'' q'和' j'的底部。最后一段的字母加入其中。我的应用程序是聊天,因此它为每个消息添加一个段落到此RichTextBox的FlowDocument并向下滚动。
我认为这不是Paragraph的问题,因为这只发生在最后一段。当添加一个新的并且旧的滚动上部时,它不会出现这个问题。
XAML代码如下所示:
<Border Grid.Row="0" BorderThickness="0,1" BorderBrush="Gray">
<ScrollViewer Margin="0,5">
<RichTextBox IsUndoEnabled="False" IsReadOnly="True" BorderThickness="0" IsDocumentEnabled="True" Background="Transparent">
<FlowDocument />
</RichTextBox>
</ScrollViewer>
</Border>
我在这个C#代码中添加了一个新段落:
Paragraph p = new Paragraph();
p.Margin = new Thickness(0, 2, 0, 2);
p.Inlines.Add(new Run(msg.Text));
rtbDocument.Blocks.Add(p);
我希望有人知道这个问题的一个聪明的解决方案,提前谢谢!
Ps。:我不知道这个问题的确切名称,所以如果有人将这个问题的标题修改为合适的标题,我会很高兴:)
答案 0 :(得分:0)
我认为这与线路堆叠有关。 Line stacking strategy on MSDN
我使用以下方法没有问题:
<Border Grid.Row="1" BorderThickness="0,1" BorderBrush="Gray" Grid.RowSpan="2">
<RichTextBox x:Name="rtbDocument" ScrollViewer.VerticalScrollBarVisibility="Auto" IsUndoEnabled="False" IsReadOnly="True" BorderThickness="5" IsDocumentEnabled="True" Background="Transparent" Margin="0,34,0,69">
<FlowDocument/>
</RichTextBox>
</Border>
Paragraph p = new Paragraph();
p.FontSize = 20;
p.Margin = new Thickness(0, 5, 0, 5);
p.Inlines.Add(new Run("some gqgb qqj"));
rtbDocument.Document.Blocks.Add(p);
//
如果我在RichTextBox中对FlowDocument进行以下更改,则会重现您的问题:
<FlowDocument LineHeight="20" LineStackingStrategy="BlockLineHeight" />
或者,对于您的代码:
Paragraph p = new Paragraph();
p.LineHeight = 20;
p.LineStackingStrategy = LineStackingStrategy.BlockLineHeight;
或,
<FlowDocument LineStackingStrategy="BlockLineHeight" />
p.LineHeight = 20;
见下图:
完全删除LineStackingStrategy将起作用,因为它将使用默认值MaxHeight。或者,您可以明确地设置它:
<FlowDocument LineStackingStrategy="MaxHeight" />