有没有人可以在WPF应用程序中使用正常运行的虚拟化WrapPanel?
我已经下载并尝试了http://virtualwrappanel.codeplex.com/上的实现.但是,我得到以下异常:
"元素'MyNamespace.VirtualizingWrapPanel'的布局测量覆盖不应该将PositiveInfinity作为DesiredSize返回,即使Infinity作为可用大小传入."
这是在尝试将wrappanel应用于ListBox时
这可能是您可以自行修复的错误.寻找MeasureOverride方法.它似乎总是返回availableSize传递给方法的.作为异常,您必须availableSize在包含时返回double.PositiveInfinity.试试这个:
if(availableSize.Width == double.PositiveInfinity || availableSize.Height == double.PositiveInfinity)
{
return Size.Empty;
}
// all the measureoverride code comes here
return availableSize;
Run Code Online (Sandbox Code Playgroud)
我没有详细介绍实现.但谁知道,你也许可以用此获得的路程,如果面板不救之间的状态MeasureOverride和ArrangeOverride(至极它不应该,如果它被很好的执行).
这个问题可能会发生,因为你的列表框位于另一个控件中,例如堆栈面板或滚动查看器,它允许列表框增长到它喜欢的任何大小.虽然虚拟包装面板在这种情况下不应该出错,但它确实解释了性能问题.
即使使用微软自己的虚拟化面板之一也无法解决这种情况下的性能问题,因为虚拟化失败了.由于列表框可以增长到它喜欢的任何大小,它会这样做并绘制所有项目,即使它们不在屏幕上......因此虚拟化不适用.
如果您确保列表框不在这些类型的容器中,您应该会发现虚拟化开始工作性能显着提高.
| 归档时间: |
|
| 查看次数: |
3580 次 |
| 最近记录: |