【问题标题】:Mahapps Metro richtextbox cuts bottom of g letterMahapps Metro Richtextbox 削减了 g 字母的底部
【发布时间】:2015-09-27 11:34:24
【问题描述】:

我对 RichTextBox 控件的问题是它切断了添加到其中的最后一个段落的“g”、“q”和“j”字母的底部。我的应用程序是一个聊天应用程序,因此它将每条消息添加一个段落到此 RichTextBox 的 FlowDocument 并向下滚动。

我认为这不是段落的问题,因为这只发生在最后一段。当添加一个新的并且旧的向上滚动时,它就没有这个问题。

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

【问题讨论】:

    标签: c# wpf richtextbox flowdocument mahapps.metro


    【解决方案1】:

    我认为这与行堆叠有关。 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" />
    

    【讨论】:

      猜你喜欢
      • 2016-12-20
      • 2019-09-29
      • 2014-02-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多