2010-12-21 82 views
1

我有一个WPF应用程序与许多选项卡.. 在一个选项卡..我做一个非常复杂的矢量绘图组成的成千上万的绘图视觉..(这代表一台机器和所有元素需要可以交互..) 它需要3/4秒,第一次绘制这个..第一次绘制后应该做..WPF tabswitch /渲染需要太多时间

问题是,如果我切换到另一个选项卡和复出,它需要释放2,3秒再次显示带有绘图的tabpage。由于没有重绘,为什么它需要这么多时间..?

+0

有没有想过如何加快这一点? – 2011-01-05 19:10:26

+0

没有..从wpf4的bitmapcache是​​不错..但它不能应用在我们的情况..可能会帮助你.. – Socrates 2011-01-06 09:37:28

回答

0

如果组件不会更改,您可以拨打Freeze()将其标记为完成。没有尝试过,我不知道这是否会有所帮助,但你可以尝试一下。

并非所有对象都是可冻结的。查看MSDN文档以获取更多信息: http://msdn.microsoft.com/en-us/library/ms750509.aspx

另一件你可以尝试的方法是将矢量图渲染为位图并显示它。也许这会让你失去矢量的精确度而感到恶心,但如果你知道它不会改变,它看起来是一样的,那有什么危害? (如果你支持打印或东西,这将需要一个高分辨率的版本,你可以随时切换回该操作)有关如何将的UIElement转换为位图信息,请访问: http://msdn.microsoft.com/en-us/library/system.windows.media.imaging.rendertargetbitmap.aspx

0

另一种可能的解决方案:你并没有真正解释你在做什么样的元素互动,但是如果你想要做的只是放大和平移,那么RenderTransform可能就足够好了(这比LayoutTransform更有效率和/或将所有元素)。我还没有玩过Freeze()RenderTransform的组合,但是您可以在减少WPF布局量的同时获得所需的缩放比例。