【问题标题】:WPF Rendering performanceWPF 渲染性能
【发布时间】:2009-10-28 00:14:02
【问题描述】:

我有一个 WPF 用户控件,该控件绑定到 DataTable,并为 DataTable 中的每一行生成 CheckBox 和屏蔽 EditBox。我的表单上有几个此控件的实例。要生成的CheckBoxes 总数超过 200。我看到一些渲染性能问题。表单会立即加载所有静态控件(文本框、下拉菜单),然后几秒钟后会出现 CheckBoxes。

有什么想法吗?

谢谢

【问题讨论】:

    标签: wpf performance wpf-controls rendering


    【解决方案1】:

    除非所有 200 项都在屏幕上可见,否则您应该使用某种虚拟布局,只为可见项创建可视化树。这将大大提高您的表现。

    【讨论】:

    • 我正在使用滚动查看器来呈现表单,因为机器具有不同的屏幕尺寸。滚动查看器是否可以与虚拟布局一起使用,如果可以的话,您能指点我一些文档吗?谢谢
    • 是的,他们会的。尝试查找 VirtualizingStackPanel,它是最常用的一种。您可以将它与 itemscontrol 一起使用 - 并将滚动查看器添加到模板。
    【解决方案2】:

    什么是“生成”复选框?您应该使用 ItemsControl(或子类)并将表示复选框的数据绑定到它。假设您正在这样做,那么您想要做的是让 ItemsControl 通过将 VirtualizingStackPanel.IsVirtualizing 属性应用于 ItemsControl 来使用“虚拟化”,如下所示:

    <ItemsControl VirtualizingStackPanel.IsVirtualizing="true" ... >
    

    您可能还想打开“容器回收”,这也有助于提高性能。这也是通过附加属性完成的:

    <ItemsControl VirtualizingStackPanel.VirtualizationMode="Recycling" ... >
    

    【讨论】:

      【解决方案3】:

      复选框太多肯定要花很多钱,如果你看基本控件的模板,它们也充满了很多uielements。

      我建议您是否可以将您的 UI 划分为 Tabs 或 Accordins,这将导致在一个屏幕上不那么可见的项目,同时也有助于用户更轻松、更快地导航到项目。

      VirtualizingStackPanel 会有所帮助,但如果您的绑定不正确,可能会导致无法预料的结果。

      1. 自定义控制模板: 您还可以使用最少的 UIElements 创建自己的自定义复选框模板,例如在 IsChecked 属性触发器上填充不同颜色的简单矩形。这将消除一些肯定会提高渲染性能的动画等。我认为 CheckBox 在动画 UI 方面是最不重要的。

      2. 当您确定将使用“文本”作为内容时,只需创建带有矩形的模板以显示填充/空值并将带有模板绑定的 TextBlock 放置到内容。

      3. 尝试为您的复选框提供固定的宽度/高度,每当您固定控件/容器的高度/宽度时,布局管理器就可以更轻松地呈现它们,而不是继续计算和调整项目。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-10-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多