代码之家  ›  专栏  ›  技术社区  ›  devdigital

WPF-虚拟化WrapPanel

  •  3
  • devdigital  · 技术社区  · 15 年前

    我已下载并尝试在 http://virtualwrappanel.codeplex.com/ . 但是,我得到以下例外:

    这是在尝试将wrappanel应用于列表框时发生的

    2 回复  |  直到 15 年前
        1
  •  7
  •   bitbonk    15 年前

    这可能是一个你可以自己修复的bug。找那个 MeasureOverride 方法。它似乎总是在回报你 availableSize 可用大小 double.PositiveInfinity . 所以试试这个:

    if(availableSize.Width == double.PositiveInfinity || availableSize.Height == double.PositiveInfinity)
    {
        return Size.Empty;
    }
    
    // all the measureoverride code comes here
    
    return availableSize;
    

    我还没有详细研究实现。但是谁知道呢,如果面板不保存状态,你也许能侥幸逃脱 测量超越 ArrangeOverride

        2
  •  6
  •   Yort    15 年前

    这个问题可能是因为您的列表框位于另一个控件中,例如堆栈面板或滚动查看器,它允许列表框增长到它喜欢的任何大小。虽然虚拟包装面板在这种情况下不应该给出错误,但它确实解释了性能问题。

    在这种情况下,即使使用微软自己的虚拟化面板也无法解决性能问题,因为虚拟化失败了。因为列表框可以增长到它喜欢的任何大小,所以它可以这样做并绘制所有的项目,即使它们不在屏幕上。。。因此,虚拟化并不适用。

    如果您确保您的列表框不在这些容器中,您应该会发现虚拟化开始工作,性能显著提高。

    推荐文章