通过long String缓慢加载RichTextBlock

时间:2016-08-22 06:51:42

标签: wpf uwp richtextbox windows-10-universal

我的RichTextBlock项目中有一个UWP,当我设置长字符串作为内容时,显示3秒内容需要很长时间。我在网上搜索并发现因为它没有virtualization,所以它想呈现所有内容。 似乎WPF和RichTextBox中存在问题。

您能否建议我应该如何渲染视觉内容?

2 个答案:

答案 0 :(得分:1)

我会按段落拆分内容,并在 ListView 中逐个渲染每个内容。

<ListView>
    <ListView.ItemTemplate>
        <DataTemplate>
            <RichTextBlock />
        </DataTemplate>
    </ListView.ItemTemplate>
</ListView>

答案 1 :(得分:0)

将长字符串转换为较小字符串List<string> strList的列表。每当ScollViewer到达末尾时,将加载更多文本(在同一段落中)。

    <ScrollViewer Name="Scroll"
          ViewChanged="Scroll_OnViewChanged">
        <StackPanel>
            <RichTextBlock>
                <Paragraph x:Name ="P"></Paragraph>
            </RichTextBlock>
        </StackPanel>
    </ScrollViewer>

    private void Scroll_OnViewChanged(object sender, ScrollViewerViewChangedEventArgs e)
            {
                var scroller = (ScrollViewer) sender;

                if (scroller.ScrollableHeight-scroller.VerticalOffset > 5) return;    
                if (pointer >= strList.Count) return;

                var run = new Run {Text = strList[pointer++]};

                P.Inlines.Add(run);
            }

pointer只是int类型的私有类字段。