2015-09-27 32 views
0

我对RichTextBox控件的问题是,它会切断添加到最后一个段落的'g','q'和'j'字母的底部。我的应用程序是一个聊天工具,因此它将每条消息的一个段落添加到此RichTextBox的FlowDocument中,并向下滚动。Mahapps Metro richtextbox削减g字母的底部

我认为这不是段落的问题,因为这只发生在最后一段。当一个新的被添加和旧的滚动上,那么它没有这个问题。

的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); 

我希望有人知道这个问题的聪明的解决方案,以感谢提前!

诗:我不知道这个问题的确切名称,所以我会很高兴,如果有人能修改此问题的标题,以适当的一个:)

回答

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; 

见下图:

Broken RichTextBox text

删除LineStackingStrategy干脆将工作,因为它会使用maxHeight的默认值。或者,您可以明确设置:

<FlowDocument LineStackingStrategy="MaxHeight" />