我有一个绑定到DataTable
的WPF用户控件,并为CheckBox
中的每一行生成EditBox
和屏蔽DataTable
。我的表单上有几个这种控件的实例。要生成的CheckBox
es的总数超过200.我看到了一些渲染性能问题。表单立即加载所有静态控件(文本框,下拉键),然后几秒钟后出现CheckBox
。
有什么想法吗?
由于
答案 0 :(得分:2)
除非屏幕上显示所有200个项目,否则您应该使用某种虚拟布局,仅为可见项目创建可视树。这将大大提高您的表现。
答案 1 :(得分:2)
什么是“生成”复选框?您应该使用ItemsControl(或子类)并将表示复选框的数据绑定到它。假设您正在这样做,那么您想要做的是通过将VirtualizingStackPanel.IsVirtualizing属性应用于ItemsControl来使ItemsControl使用“虚拟化”,如下所示:
<ItemsControl VirtualizingStackPanel.IsVirtualizing="true" ... >
您可能还想打开“容器回收”,这也有助于提高性能。这也是附属财产:
<ItemsControl VirtualizingStackPanel.VirtualizationMode="Recycling" ... >
答案 2 :(得分:0)
太多的复选框肯定会花费很多,如果你看一下基本控件的模板,它们也会充满很多元素。
我建议您将UI划分为Tabs或Accordins,这样会在一个屏幕上显示较少的可见项目,同时也可以帮助用户轻松快捷地导航到项目。
VirtualizingStackPanel会有所帮助,但如果你的绑定不正确,可能会导致不可预测的结果。
自定义控制模板: 您还可以使用最少的UIElements创建自己的自定义复选框模板,例如在IsChecked属性触发器上填充不同颜色的简单矩形。这将消除很少的动画等,这些动画肯定会改善你的渲染性能。我相信CheckBox在设置动画UI时最不重要。
如果您确定要使用“文本”作为内容,则只需创建带有矩形的模板以显示填充/空值,并将带有模板绑定的TextBlock放入内容。
尝试为您的复选框指定固定的宽度/高度,每当您修改控件/容器的高度/宽度时,布局管理器就可以渲染它们,而不是继续计算和调整项目。 / p>