WPF渲染性能

WPF渲染性能,wpf,performance,wpf-controls,rendering,Wpf,Performance,Wpf Controls,Rendering,我有一个WPF用户控件,它绑定到数据表,并为数据表中的每一行生成复选框,以及一个屏蔽的编辑框。我的窗体上有几个此控件的实例。要生成的复选框的总数超过200。我看到一些渲染性能问题。表单立即加载所有静态控件(文本框、下拉列表),几秒钟后出现复选框 有什么想法吗 谢谢除非所有200个项目都在屏幕上可见,否则您应该使用某种虚拟布局,只为可见项目创建可视树。这将大大提高您的性能。除非所有200项在屏幕上都可见,否则您应该使用某种虚拟布局,只为可见项创建可视树。这将大大提高您的性能。什么是“生成”复选框?

我有一个WPF用户控件,它绑定到
数据表
,并为
数据表
中的每一行生成
复选框
,以及一个屏蔽的
编辑框
。我的窗体上有几个此控件的实例。要生成的
复选框的总数超过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添加到模板中。