How can I suspend and resume layout in WPF? I heard that this is not necessary. But this is extremely necessary!
I process a lot of change positions, and if they are ren
Have you considered removing the canvas from the window first which would hide it, then clear and re-add all your items to the canvas, then re add the canvas back to the window?
WPF is a retained composition engine. What it means is you don't have to do the rendering yourself hooking the Rendering
event, but rather compose an image using nodes that you will put in a tree. See here for details on WPF architecture: WPF Architecture. I can assure you if you understand perfectly this document as well as the Layout System link Rick Sladkey sent, you should also understand why you should change your code if you want to continue with WPF.
If you play it right with WPF (ie: use dependency properties, override Measure & Arrange methods for example), you will see it's a very powerful engine capable of displaying thousands of nodes in the graphical tree. I suggest another useful reading: ZoomableApplication2: A Million Items
You haven't given enough information except to say that your "process a lot of changes". But if you make all those changes:
UpdateLayout
, andthen no layout occurs in-bewteen those changes. Therefore there is nothing to suspend or resume because layout is always deferred until after you return from making these kinds of changes.
So, if you are experiencing delays, then is is not because your are not batching your layout changes ala WinForms. As a result, the only way to reduce the delay, if it is indeed due to layout, is to avoid unnecessary layout recalculations. Again, without knowing what you are doing, it is impossible to suggest anything concrete. But there are many properties you can avoid to might trigger a recursive layout pass. See Layout Performance Considerations in this article: