In short, if a control template uses triggers with enter/leave actions affecting a UIElement which is collapsed, WPF will leak that UIElement (complete specifics can be found here: http://blog.ramondeklein.nl/index.php/2009/02/20/memory-leak-with-wpf-animations/). Briefly, what happens is that if the item is collapsed, the enter/exit actions will not actually occur, but will be placed in a "DeferredActions" table in the template itself. If the UIElement is never shown, then these deferred actions won't be evaluated, and they'll remain as strong references to the the still collapsed UIElement.
In our case, this happens with the template for the RadBusyIndicator, which amongst other things, sets a ControlTemplate for the RadProgressBar it contains. The "IndeterminateDonut" UIElement in the RadProgressBar is initially Collapsed, even though there are Enter/Exit actions for animating it to continually go in a circle. Now this doesn't seem to be a problem when the BusyIndicator actually shows up at some point. However, when the RadBusyIndicator doesn't show up at any point during a Window's lifetime, and then the window is closed, we manifest the same exact problem as described above.
The fix was to grab the default ControlTemplate for the RadBusyIndicator, and change the initial visibility of the RadProgressBar to Hidden instead of Collapsed, so those actions can be evaluated. I haven't tested if this affects animation performance, however. As the link describes, this is fixed in WPF 4 using the ConditionalWeakTable to keep weak references to the elements which deferred actions will affect.
In our case, this happens with the template for the RadBusyIndicator, which amongst other things, sets a ControlTemplate for the RadProgressBar it contains. The "IndeterminateDonut" UIElement in the RadProgressBar is initially Collapsed, even though there are Enter/Exit actions for animating it to continually go in a circle. Now this doesn't seem to be a problem when the BusyIndicator actually shows up at some point. However, when the RadBusyIndicator doesn't show up at any point during a Window's lifetime, and then the window is closed, we manifest the same exact problem as described above.
The fix was to grab the default ControlTemplate for the RadBusyIndicator, and change the initial visibility of the RadProgressBar to Hidden instead of Collapsed, so those actions can be evaluated. I haven't tested if this affects animation performance, however. As the link describes, this is fixed in WPF 4 using the ConditionalWeakTable to keep weak references to the elements which deferred actions will affect.