none
WPF RichTextBox实现显示区域内容不自动往下滚 RRS feed

  • 问题

  • <RichTextBox x:Name="RichTextBox1" Width="200" 
                         VerticalScrollBarVisibility="Auto" TextChanged="RichTextBox1_OnTextChanged">
                <FlowDocument x:Name="MsFlowDocument">
                </FlowDocument>
            </RichTextBox>
    
    MsFlowDocument.Blocks.InsertBefore(MsFlowDocument.Blocks.FirstBlock, new Paragraph(new Run("我就是头部")));

    如上我使用InsertBefore时如何RichTextBox滚动区域不跟着往下滚动呢?

    比如我原来的界面是这样的,点击加载以前,从头部加载信息后会变成下面这样。

    而我想实现的效果是,加载以前时显示为下面内容区域不会自动往下滚动这样。该如何实现呢,谢谢

    2016年5月13日 8:32

答案

  • 您好 skczjun,

    >>"如上我使用InsertBefore时如何RichTextBox滚动区域不跟着往下滚动呢?"

    这里我们需要重新计算滚动条位置,才能让滚动条不跟着往下滚动。这里需要使用到以下这个个属性值。

    RichTextBox1.VerticalOffset 这个代表滚动条的当前高度

    我们假设每增加一笔记录的新增高度为25,那么新的VerticalOffset就需要增加25,我们只需要调用ScrollToVerticalOffset方法让滚动条滚动到新位置即可。

    RichTextBox1.ScrollToVerticalOffset(RichTextBox1.VerticalOffset + 25)

    您需要根据实际情况调整这个新增的Offset值。

    Best Regards,
    Li Wang


    We are trying to better understand customer views on social support experience, so your participation in this interview project would be greatly appreciated if you have time. Thanks for helping make community forums a great place.
    Click HERE to participate the survey.

    • 已标记为答案 skczjun 2016年5月16日 2:36
    2016年5月14日 6:26

全部回复

  • 您好 skczjun,

    >>"如上我使用InsertBefore时如何RichTextBox滚动区域不跟着往下滚动呢?"

    这里我们需要重新计算滚动条位置,才能让滚动条不跟着往下滚动。这里需要使用到以下这个个属性值。

    RichTextBox1.VerticalOffset 这个代表滚动条的当前高度

    我们假设每增加一笔记录的新增高度为25,那么新的VerticalOffset就需要增加25,我们只需要调用ScrollToVerticalOffset方法让滚动条滚动到新位置即可。

    RichTextBox1.ScrollToVerticalOffset(RichTextBox1.VerticalOffset + 25)

    您需要根据实际情况调整这个新增的Offset值。

    Best Regards,
    Li Wang


    We are trying to better understand customer views on social support experience, so your participation in this interview project would be greatly appreciated if you have time. Thanks for helping make community forums a great place.
    Click HERE to participate the survey.

    • 已标记为答案 skczjun 2016年5月16日 2:36
    2016年5月14日 6:26
  • 你好,新纪录的高度是不定,有什么办法取得呢?

    MsFlowDocument.Blocks.InsertBefore(MsFlowDocument.Blocks.FirstBlock, new Paragraph(new Run("我就是头部\n我就是头部\n我就是头部\n我就是头部\n我就是头部\n我就是头部\n我就是头部\n我就是头部\n我就是头部\n")));

    这个只是演示用的,实际Run里面内容是一个变量。

    2016年5月16日 0:26
  • 您好 skczjun,

    您可以参考我在下面一个帖子中关于如何计算流文档高度的回答。但是这只是一个粗略的估算。没有办法做到很精确。
    https://social.msdn.microsoft.com/Forums/zh-CN/5a42e044-a418-47ee-9d81-db2ef36c91eb/richtextbox?forum=wpfzhchs#2b55f8f8-51aa-4f78-bd74-ef0d8eefb3c5

    Best Regards,
    Li Wang


    We are trying to better understand customer views on social support experience, so your participation in this interview project would be greatly appreciated if you have time. Thanks for helping make community forums a great place.
    Click HERE to participate the survey.

    2016年5月16日 2:48