示例#1
0
        /// <summary>
        /// Update the Adorner for the given element 
        /// </summary>
        /// <param name="element">UIElement for which we're updating AdornerSet</param> 
        private void UpdateAdorner(UIElement element) 
        {
            Visual adornerLayerParent = VisualTreeHelper.GetParent(this) as Visual; 
            if (adornerLayerParent == null)
            {
                // Never update when the adorner layer is not part of a visual tree.
                return; 
            }
 
            // We only expect one to have been removed on any one call. 
            ArrayList removeList = new ArrayList(1);
 
            if (element != null)
            {
                // Make sure element is still beneath the adorner decorator
                if (!element.IsDescendantOf(adornerLayerParent)) 
                {
                    removeList.Add(element); 
                } 
                else
                { 
                    UpdateElementAdorners(element);
                }
            }
            else 
            {
                ICollection keyCollection = ElementMap.Keys; 
                UIElement[] keys = new UIElement[keyCollection.Count]; 
                keyCollection.CopyTo(keys, 0);  // make a static copy of the keys to prevent any possible enumerator exceptions
 
                for (int i = 0; i < keys.Length; i++)
                {
                    UIElement elTemp = (UIElement)keys[i];
 
                    // Make sure element is still beneath the adorner decorator
                    if (!elTemp.IsDescendantOf(adornerLayerParent)) 
                    { 
                        removeList.Add(elTemp);
                    } 
                    else
                    {
                        UpdateElementAdorners(elTemp);
                    } 
                }
            } 
 
            for (int i = 0; i < removeList.Count; i++)
            { 
                Clear((UIElement)removeList[i]);
            }
        }