[英]Displaying Border on TextBlock when TextBlock placed inside ScrollViewer
[英]Large TextBlock works much faster when placed inside a ViewBox
无意中发现了一个奇怪的行为。 包含 100k 行的大型 TextBlock 渲染速度非常慢,调整大小和滚动大约需要一秒钟。 但是,如果将此 TextBlock 放置在Stretch="None"
的 ViewBox 中,它会非常快速地滚动和调整大小。
ViewBox 肯定改变了背景中的某些东西,但是什么以及为什么?
Window 内容
<Grid>
<ScrollViewer>
<Viewbox Stretch="None">
<TextBlock x:Name="TextContainer" HorizontalAlignment="Left" TextAlignment="Left" TextWrapping="Wrap" VerticalAlignment="Center"/>
</Viewbox>
</ScrollViewer>
</Grid>
代码隐藏,只是创建一些文本
public MainWindow()
{
InitializeComponent();
StringBuilder sb = new StringBuilder();
for(int i = 1; i < 100000; i++)
{
sb.AppendLine($"Line #{i} ABCDEFGHIJKLMNOPQRSTUVWXYZ ABCDEFGHIJKLMNOPQRSTUVWXYZ ABCDEFGHIJKLMNOPQRSTUVWXYZ");
}
this.TextContainer.Text = sb.ToString();
}
ScrollView 的存在没有任何影响,它在没有 ViewBox 的情况下仍然很慢,而在有它的情况下仍然很快。 如果我将 TextBlock 更改为具有相同内容的 TextBox,则在所有情况下性能都会变快。 所以它是特定于 TextBox 的。
小更新:澄清。 我不需要使用 TextBlock、TextBox 或 [insert whatever you want] 来显示大量文本。 我只想了解,为什么它会这样? 也许这些知识会帮助我找到解决以后问题的方法,避免一些麻烦,或者只是满足我对知识的渴望。 虽然我很欣赏关于性能优化的建议,但它并没有回答这个问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.