当在WinRT中显示大量文本时,无论是在
这是XAML部分:
在第一时间看起来似乎能够正常工作,但当你开始缩放时,应用程序会冻结和崩溃,因为xaml渲染器失败了。这种情况会在没有任何交互的情况下立即发生,而且对于大量文本来说更加明显。
所以问题是:如何在WinRT中显示大量文本,其中“大量”指的是约100KB或更多甚至达到5MB的文本?
注意:我尚未尝试WebBrowser控件,因为它应该是只读的,并且我想避免复制和粘贴。所以WebBrowser控件不适合我。
编辑:
我找到了一个临时解决方案,将行添加为
RichTextBlock
还是在TextBlock
中,我注意到WinRT XAML渲染引擎会达到其极限。因此,请考虑以下简单示例,其中我在XAML中定义了一个RichTextBlock
,并在代码后台中使用大量文本填充它。(对于简单的TextBlock
,这将类似工作。)这是XAML部分:
<ScrollViewer>
<RichTextBlock Name="rtb" />
</ScrollViewer>
同时还需要一些后端代码来填充它:
void MainPage_Loaded(object sender, Windows.UI.Xaml.RoutedEventArgs e)
{
string text = Enumerable.Range(0, 200).Aggregate("", (current, i) => current + loremipsum);
text = text.Replace("\r\n", "\n").Replace("\r", "\n");
foreach (var line in text.Split('\n'))
{
var paragraph = new Paragraph();
paragraph.Inlines.Add(new Run { Text = line });
this.rtb.Blocks.Add(paragraph);
}
}
private const string loremipsum = @"
Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.
Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore te feugait nulla facilisi. Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat.
Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat. Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore te feugait nulla facilisi.
Nam liber tempor cum soluta nobis eleifend option congue nihil imperdiet doming id quod mazim placerat facer possim assum. Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat. Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat.
Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis. ";
在第一时间看起来似乎能够正常工作,但当你开始缩放时,应用程序会冻结和崩溃,因为xaml渲染器失败了。这种情况会在没有任何交互的情况下立即发生,而且对于大量文本来说更加明显。
所以问题是:如何在WinRT中显示大量文本,其中“大量”指的是约100KB或更多甚至达到5MB的文本?
注意:我尚未尝试WebBrowser控件,因为它应该是只读的,并且我想避免复制和粘贴。所以WebBrowser控件不适合我。
编辑:
我找到了一个临时解决方案,将行添加为
ItemsControl
的项,其中项目是虚拟化的。<ItemsControl Name="ItemsControl">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<VirtualizingStackPanel/>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.Template>
<ControlTemplate TargetType="ItemsControl">
<ScrollViewer>
<ItemsPresenter/>
</ScrollViewer>
</ControlTemplate>
</ItemsControl.Template>
<ItemsControl.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding}"/>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
有了这个解决方案,应用程序不再崩溃,但性能真的很差。
ItemsStackPanel
? - Nate Diamond