I would recommend that you create an interface that you require all user
controls to implement. You can then add a method to notify the user control
that it is closing. The UC should then clean up its own resources. Within
the tree control you can also raise an event notifying outside listeners that
the view is changing. Finally you should consider simply hiding the UC when
it switches away instead of closing it. Some views may be very costly to
create and therefore you could leave it up to the view itself to decide
whether it should close or simply hide itself. It depends on how often the
view is likely to change (for example in Explorer the file view is normally
the only view seen so unloading and reloading it each time the user changes
their selection is overkill).
As a side note since you only have a single view on the right side you can
simply hide the view when the user selects another node. In the
OnVisibleChanged event of your UC you could then do your cleanup (or at least
toggle it on or off). This might not work well if your app minimizes but
trial and error would reveal the issues.