我们有一个控件,可以使用大量不同大小和复杂程度的控件显示大量数据。由于需要布置大量控件,可能会有非常明显的延迟。
我们知道延迟来自测量/排列功能,因为我们有一个测试类,它从一个覆盖它的一个定时代码覆盖它们的堆栈面板中消失。
我们不想使用虚拟化,因为滚动条的副作用不断改变它们的范围,我们不想隐藏数据在扩展器或任何其他折叠控件下,因为客户端要求我们在一个长时间内显示它名单。但是,他们想要知道控制实际上是在延迟发生时做某事,某种进展状态。
所以我的问题是 - 是否有某种方法可以创建一个控件,在其内容实际布局之前将加载动画显示为装饰器或其他内容?我很欣赏这可能是不可能的,因为安排/测量也是在UI线程上完成的。
答案 0 :(得分:0)
根据我的经验,不幸的是我不得不说答案是否定的。我花了很长时间试图找到一个非常类似问题的解决方案。
问题的关键在于,在UI线程上执行任何使用数据填充UI控件的工作必须。我的应用程序中的所有数据都异步获取以“释放UI”......当这种情况发生在后台线程中时,UI线程可以自由显示动画加载图像。但是,只要数据到达并开始填充UI控件,加载动画就会冻结,如您所料。
我甚至尝试使用.gif图像,因为我想它在UI线程上不需要任何时间,但不幸的是,WPF不支持.gif动画。我设计了一个类来依次为.gif文件的每个帧设置动画并再次尝试,但现在(手动).gif动画确实使用UI线程时间,因此在控件被填充时冻结
所以你留下的选项是:
我选择动画版本,在最后一刻冻结数据。