WPF渲染性能
我有一个WPF用户控件,它绑定到WPF渲染性能,wpf,performance,wpf-controls,rendering,Wpf,Performance,Wpf Controls,Rendering,我有一个WPF用户控件,它绑定到数据表,并为数据表中的每一行生成复选框,以及一个屏蔽的编辑框。我的窗体上有几个此控件的实例。要生成的复选框的总数超过200。我看到一些渲染性能问题。表单立即加载所有静态控件(文本框、下拉列表),几秒钟后出现复选框 有什么想法吗 谢谢除非所有200个项目都在屏幕上可见,否则您应该使用某种虚拟布局,只为可见项目创建可视树。这将大大提高您的性能。除非所有200项在屏幕上都可见,否则您应该使用某种虚拟布局,只为可见项创建可视树。这将大大提高您的性能。什么是“生成”复选框?
数据表
,并为数据表
中的每一行生成复选框
,以及一个屏蔽的编辑框
。我的窗体上有几个此控件的实例。要生成的复选框的总数超过200。我看到一些渲染性能问题。表单立即加载所有静态控件(文本框、下拉列表),几秒钟后出现复选框
有什么想法吗
谢谢除非所有200个项目都在屏幕上可见,否则您应该使用某种虚拟布局,只为可见项目创建可视树。这将大大提高您的性能。除非所有200项在屏幕上都可见,否则您应该使用某种虚拟布局,只为可见项创建可视树。这将大大提高您的性能。什么是“生成”复选框?您应该使用ItemsControl(或子类)并将表示复选框的数据绑定到它。假设您正在这样做,那么您要做的是通过将VirtualzingStackPanel.IsVirtualization属性应用于ItemsControl,使ItemsControl使用“虚拟化”,如下所示:
<ItemsControl VirtualizingStackPanel.IsVirtualizing="true" ... >
您可能还希望启用“容器回收”,这也有助于提高性能。这也可以通过附加属性完成:
<ItemsControl VirtualizingStackPanel.VirtualizationMode="Recycling" ... >
什么是“生成”复选框?您应该使用ItemsControl(或子类)并将表示复选框的数据绑定到它。假设您正在这样做,那么您要做的是通过将VirtualzingStackPanel.IsVirtualization属性应用于ItemsControl,使ItemsControl使用“虚拟化”,如下所示:
<ItemsControl VirtualizingStackPanel.IsVirtualizing="true" ... >
您可能还希望启用“容器回收”,这也有助于提高性能。这也可以通过附加属性完成:
<ItemsControl VirtualizingStackPanel.VirtualizationMode="Recycling" ... >
太多的复选框肯定会花很多钱,如果你看一下基本控件的模板,它们也充满了很多UIElement
我建议您是否可以将UI划分为选项卡或手风琴,这将导致在一个屏幕上显示的项目较少,并且可以帮助用户轻松、快速地导航到项目
VirtualizingStackPanel会有所帮助,但如果绑定不正确,则可能会导致不可预知的结果
自定义控件模板:
您还可以使用最少的UI元素创建自己的自定义复选框模板,例如在IsChecked属性触发器上填充不同颜色的简单矩形。这将消除一些动画等,这些动画肯定会提高渲染性能。我认为复选框是最不重要的,当谈到动画用户界面
当您确定将使用“文本”作为内容时,只需创建带有矩形的模板以显示填充/空值,并将带有模板绑定的TextBlock放入内容
尝试为复选框指定固定的宽度/高度,每当您固定控件/容器的高度/宽度时,布局管理器就可以渲染它们,而不是继续计算和调整项目
太多的复选框肯定要花很多钱,如果你看一下基本控件的模板,它们也充满了很多UIElement
我建议您是否可以将UI划分为选项卡或手风琴,这将导致在一个屏幕上显示的项目较少,并且可以帮助用户轻松、快速地导航到项目
VirtualizingStackPanel会有所帮助,但如果绑定不正确,则可能会导致不可预知的结果
自定义控件模板:
您还可以使用最少的UI元素创建自己的自定义复选框模板,例如在IsChecked属性触发器上填充不同颜色的简单矩形。这将消除一些动画等,这些动画肯定会提高渲染性能。我认为复选框是最不重要的,当谈到动画用户界面
当您确定将使用“文本”作为内容时,只需创建带有矩形的模板以显示填充/空值,并将带有模板绑定的TextBlock放入内容
尝试为复选框指定固定的宽度/高度,每当您固定控件/容器的高度/宽度时,布局管理器就可以渲染它们,而不是继续计算和调整项目
我使用滚动查看器来显示表单,因为机器的屏幕大小不同。scroll viewer可以使用虚拟布局吗?如果可以的话,你能告诉我一些文档吗?谢谢他们会的。试着查找虚拟化StackPanel,它是最常用的面板之一。您可以将它与itemscontrol一起使用,并将scrollviewer添加到模板中。我使用scrollviewer来显示表单,因为计算机的屏幕大小不同。scroll viewer可以使用虚拟布局吗?如果可以的话,你能告诉我一些文档吗?谢谢他们会的。试着查找虚拟化StackPanel,它是最常用的面板之一。您可以将其与itemscontrol一起使用,并将scrollviewer添加到模板中。