我有一个带有很多标签的WPF应用程序.. 在一个标签中..我制作了一个非常复杂的矢量绘图,包含数千个绘图视觉效果..(这代表一台机器,所有元素都需要可以互动...) 第一次绘制它需要3/4秒。第一次绘制后应该完成..
问题是如果我切换到另一个标签并回来,它需要2,3秒才能再次显示标签页面。由于没有重绘,为什么需要花费这么多时间..?
答案 0 :(得分:0)
如果组件不会更改,您可以在其上调用Freeze()
将其标记为已完成。如果没有尝试,我不知道这是否会有所帮助,但你可以试一试。
并非所有对象都是Freezable。查看MSDN文档以获取更多信息: http://msdn.microsoft.com/en-us/library/ms750509.aspx
你可以尝试的另一件事是将矢量艺术渲染到位图,并显示它。也许它让你觉得丢失矢量精度感觉很糟糕,但如果你知道它不会改变它看起来会一样,那有什么危害呢? (如果您支持打印或需要高分辨率版本的东西,您可以随时切换回该操作。)有关如何将UIElement转换为位图的信息,请查看: http://msdn.microsoft.com/en-us/library/system.windows.media.imaging.rendertargetbitmap.aspx
答案 1 :(得分:0)
另一种可能的解决方案:你并没有真正解释你正在用元素进行什么样的交互,但如果你想做的只是缩放和平移,RenderTransform
可能就足够了(更多效率高于LayoutTransform
和/或单独移动所有元素)。我没有使用Freeze()
和RenderTransform
组合,但您可以在减少WPF必须执行的布局量的同时获得所需的缩放。