Hello,
I want to close the Panes, and not just Hide them (put them in the ClosedPanes collection).
There is no CloseAction property on Pane, so how can i accomplish that?
I want to release the memory as the dynamically created documents/toolwindows are closed.
Thank you in advance,
Michael
Hi Michael,
do you really need to delete the closed panes? My point is that you could just set the panes Content to null in PaneClosed event so the memory of the content to be collected by the GC . Then the ContentPane object will resides in the ClosedPanes collection and eventually if you expect a lot of panes to be opened and closed you could reuse the already closed panes from the ClosedPanes collection.
This is just a suggestion. We could probably work to fix the workaround proposed by Nikola if you consider it more suitable.
Regards,
Hi Konstantin,
i had already implemented a reuse behavior of the closed panes, but i encountered the following problem.
1)I create a pane dynamicaly which is by default docked in the documents region.(I find/create a tabcontainerpane and add the pane to it's collection)
2)I docked it left in the xamdockmanager, and then i closed it.
3)I created another dynamic pane and i reused the previously closed pane. The pane should be shown again by default in the documents region.
4)I find/create a tabcontainerpane in the document regions and at the pane to it's collection.If OpenPane() method is not called, the ContainerPane won't show up.If i call the OpenPane() method it will show docked left (the before closed state of the Pane)
I would appreciate two quick fixes for both behaviors if applicable
I think that having common XAML codebase for WPF and SL , you should implement the CloseActionType property as WPF has... This will solve the above problems...
could you try the following:
void igXamDockManager_PaneClosing(object sender, CancellablePaneEventArgs e) { e.Cancel = true; ContentPane cPane = e.Pane as ContentPane; if (e.Pane.IsFloating == true) e.Pane.IsFloating = false; if (cPane != null && cPane.IsPinned == false) { cPane.IsPinned = true; } if (this.igXamDockManager.Panes.Contains(e.Pane)) { this.igXamDockManager.Panes.Remove(e.Pane); return; } else if (e.Pane.OwnerPane is TabGroupPane) (e.Pane.OwnerPane as TabGroupPane).Panes.Remove(e.Pane as ContentPane); else if (e.Pane.OwnerPane is SplitPane) (e.Pane.OwnerPane as SplitPane).Panes.Remove(e.Pane); }
I think that this might work for you.
I couldn't manage to reproduce this behavior
redbyron said: 1) When i close a ContentPane which is in a split container, The Pane becomes floating window
1) When i close a ContentPane which is in a split container, The Pane becomes floating window
However we have found a memory leak(about 420 B for a pane) which wont let the removed panes to be collected in some cases. We are targeting to fix this issue in August SR(the one after the upcoming one).
Please let me know if this does not resolves your issue completely or you need any further assistance.
Indeed the unpinned and floating panes do not go to the XamDockManager collections' by unsetting the corresponding flag...
The other issue still exists... here is what i do to show the panes dynamically and how to reproduce it...
For docking panel
1)I find tabgrouppane to the dock location of the xamdockmanager (if one does not exist i create it and dock it)
2)I add the pane to previous tabgrouppane.
3)Then i add another pane to the same dock location,so i find the previous tabgrouppane and add it to it's pane collection.
4)Move the second pane and dock it behind the first one.
5)Close the first one.
6)Try to close the second one. It will become floating, and then it won't close....
I couldn't understand what you mean by this:
I am attaching my testing solution in which I was not able to reproduce the issue you've described.Could you take a look and modify it so I could be able to check it out.
Hi,
i downloaded the sample and i reproduced it like this... (did not make any change...)
1)Docked "DCH 1" window to the left.
2)Docked "DCH 2" window below "DCH 1"
3)Close them... They will become floating...
PS
Sorry, what i meant was that by resetting the IsPinned and IsFloating flag, it worked as expected
Hi MIchael,
sorry for the late response,
I have managed to reproduce the issue you've described and I logged a development issue about the panes that become floating when PaneClosing event is canceled, the bug id is #80435. The mem. leak issue id is 80351. I've asked Valerie to associate these bus with your support case so you can be notified when they are resolved.
I'll contact our dev team to see if there is a way to clear a pane's history(this is why after recycling the pane it is situated at its previous place) and go with the panes recycling workaround.
Thanks,
i will be monitoring for a suggestion for the recycling behavior...