//------------------------------------------------------ // // Internal Methods // //------------------------------------------------------ #region Internal Methods // Wrap the found peer before shipping it over process boundary - static version for use outside ElementProxy. internal static ElementProxy StaticWrap(AutomationPeer peer, AutomationPeer referencePeer) { ElementProxy result = null; if (peer != null) { //referencePeer is well-connected, since UIA is asking us using it. //However we are trying to return the peer that is possibly just created on some //element in the middle of un-walked tree and we need to make sure it is fully //"connected" or initialized before we return it to UIA. //This method ensures it has the right _parent and other hookup. peer = peer.ValidateConnected(referencePeer); if (peer != null) { // Use the already created Wrapper proxy for peer if it is still alive if (peer.ElementProxyWeakReference != null) { result = peer.ElementProxyWeakReference.Target as ElementProxy; } if (result == null) { result = new ElementProxy(peer); peer.ElementProxyWeakReference = new WeakReference(result); } // If the peer corresponds to DataItem notify peer to add to storage to // keep reference of peers going to the UIA Client if (result != null) { if (peer.IsDataItemAutomationPeer()) { peer.AddToParentProxyWeakRefCache(); } } } } return(result); }