2015-09-27 86 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" />