Let's see an example:
<SPAN class="keyword token">var</SPAN> mapToolsOverlayControl <SPAN class="operator token">=</SPAN> <SPAN class="keyword token">new</SPAN> <SPAN class="token class-name">MapToolsOverlayControl</SPAN>
<SPAN class="punctuation token">{</SPAN>
DataContext <SPAN class="operator token">=</SPAN> <SPAN class="keyword token">new</SPAN> <SPAN class="token class-name">MapToolsOverlayControlViewModel</SPAN><SPAN class="punctuation token">(</SPAN><SPAN class="punctuation token">)</SPAN>
<SPAN class="punctuation token">}</SPAN><SPAN class="punctuation token">;</SPAN>
MapView<SPAN class="punctuation token">.</SPAN>Active<SPAN class="punctuation token">.</SPAN><SPAN class="token function">AddOverlayControl</SPAN><SPAN class="punctuation token">(</SPAN>mapToolsOverlayControl<SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">;</SPAN><SPAN class="line-numbers-rows"><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN></SPAN>Then if I call MapView.Active.GetOverlayControls(), I'll get objects of these types:
ArcGIS.Desktop.Internal.Mapping.Controls.MapCreditsControl
ArcGIS.Desktop.Internal.Mapping.Controls.AirspaceControlWrapper
Where is my MapToolsOverlayControl?
Inspecting things with reflection I found that GetOverlayControls returns UIElements that has UserControl property. So I'm able to find my control with reflection. But why it is wrapped to some internal class (AirspaceControlWrapper)? It's not what user expects from AddOverlayControl.
If you need to wrap added control for some reason, please return new object from AddOverlayControl and give a remark in docs with snippet of how to get a control after it's added on map.