WPF ScrollViewer缓慢加载RichTextBox

时间:2015-05-22 04:28:53

标签: c# wpf

我有以下简单的代码,我只想加载文本文件 (具有82KB和4000行的文件)到RichTextBox中。但每当我使用ScrollViewer加载时需要相当长的时间,我想使用ScrollViewer,因为我想滚动到文档中的特定位置并同步滚动两个RichTextBox(一起)。任何解决方案?

namespace WpfApplication1
{
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
            string text = System.IO.File.ReadAllText(@"C:\Users\sss\Desktop\WriteLines.txt");
            Paragraph p = new Paragraph();
            Run run = new Run(text) { Foreground = new SolidColorBrush(Color.FromRgb(75, 74, 77)) };
            p.Inlines.Add(run);
            richTextBox1.Document.Blocks.Add(p);
        }
    }
}

//慢

<Window x:Class="WpfApplication1.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525">
    <Grid>
        <ScrollViewer Grid.Row="1"  Name="scrolBase" HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Auto">
            <RichTextBox HorizontalAlignment="Left" Name="richTextBox1" VerticalAlignment="Top"   IsReadOnly="True" ScrollViewer.VerticalScrollBarVisibility="Auto"
                         Width="500" 
                         ScrollViewer.HorizontalScrollBarVisibility ="Auto"
                         >
                <FlowDocument PageWidth="1000" />
            </RichTextBox>
        </ScrollViewer>
    </Grid>
</Window>

//快速

<Window x:Class="WpfApplication1.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525">
    <Grid>

            <RichTextBox HorizontalAlignment="Left" Name="richTextBox1" VerticalAlignment="Top"   IsReadOnly="True" ScrollViewer.VerticalScrollBarVisibility="Auto"
                         Width="500" 
                         ScrollViewer.HorizontalScrollBarVisibility ="Auto"
                         >
                <FlowDocument PageWidth="1000" />
            </RichTextBox>

    </Grid>
</Window>

昨天我问了一个类似的问题,

In WPF RichTextBox takes too long to Load when there is no height

2 个答案:

答案 0 :(得分:1)

为什么不使用RichTextBox的滚动条?设置VerticalScrollBarVisibility="Visible"

您可以使用RichTextBox类提供的不同Scroll(ScrollToEnd(),ScrollToVerticalOffset()等)方法。

答案 1 :(得分:1)

我知道WPF在控件中处理大型数据集并不是最好的。也许这是因为scrollviewer允许richtextbox完整地渲染自己,但是当richtextbox的高度是有限的高度时,它只呈现它需要的东西?我同意Michael G - 您是否尝试过使用richTextBox中的垂直滚动?这可以更好地测试大量数据...