WPF:由StackPanel引起的高内存占用与卡顿

WPF有一个概念叫UI虚拟化,就是只会渲染窗口内可视的UI。
简单说:只创建你看得见的控件,看不见的就不创建,等你滚动到它时再动态生成。
一般的内容控件,如ListBox、ListView、DataGrid等,都是支持UI虚拟化的。

但是如果使用StackPanel布局面板,作为数据容器那么就会造成“UI虚拟化的失效”。

<StackPanel>
	<TextBlock>hello</TextBlock>
    <DataGrid ItemsSource="{Binding BigData}" />
</StackPanel>

这种情况下,StackPanel会跟它里面的内容控件“说”:“你们都有无限的空间啦,随便用”。因此DataGrid收到这个信息后,即使窗口内看不见,它也会把所有的数据及其UI都渲染出来,造成高内容占用与卡顿。

StackPanel不在意窗口是否还有足够的空间放下内容,它会无限堆叠,直至内容渲染完毕,并且不会对内容自动换行,不会自动提供滑动功能。
image

相关的还有ScrollViewer

Canvas

posted @ 2026-05-10 15:17  汇集电力  阅读(19)  评论(0)    收藏  举报