Mahapps Metro richtextbox削减了g字母的底部

时间:2015-09-27 11:34:25

标签: c# wpf richtextbox flowdocument mahapps.metro

我对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。:我不知道这个问题的确切名称,所以如果有人将这个问题的标题修改为合适的标题,我会很高兴:)

1 个答案:

答案 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;

见下图:

Broken RichTextBox text

完全删除LineStackingStrategy将起作用,因为它将使用默认值MaxHeight。或者,您可以明确地设置它:

<FlowDocument LineStackingStrategy="MaxHeight" />
相关问题