private void AddRefreshElements(DomElement startElement, DomElement endElement)
        {
            DomContentElement ce  = myContainer.ContentElement;
            DomElementList    res = this.OwnerList.RefreshElements;

            if (res.Contains(startElement) == false)
            {
                res.Add(startElement);
            }
            DomContentLine startLine = null;

            while (startElement != null)
            {
                // 可能存在元素不显示在文档中,例如处于图形模式下的XTextShapeInputFieldElement中,
                // 内容就不显示,在此向上查询显示出来的内容。
                if (ce.PrivateContent.Contains(startElement))
                {
                    startLine = startElement.OwnerLine;
                    if (res.Contains(startElement) == false)
                    {
                        res.Add(startElement);
                    }
                    break;
                }
                startElement = startElement.Parent;
            }//while

            if (res.Contains(endElement) == false)
            {
                res.Add(endElement);
            }
            DomContentLine endLine = null;

            while (endElement != null)
            {
                if (ce.PrivateContent.Contains(endElement))
                {
                    endLine = endElement.OwnerLine;
                    if (res.Contains(endElement) == false)
                    {
                        res.Add(endElement);
                    }
                    break;
                }
                endElement = endElement.Parent;
            }//while

            ce.SetLinesInvalidateState(
                startLine,
                endLine);
        }
Esempio n. 2
0
        //public static bool SplitElements(XTextElementList SourceList)
        //{
        //    return SplitElements(SourceList, false);
        //    //bool result = false;
        //    //XTextElementList tempList = new XTextElementList();
        //    //tempList.AddRange(SourceList);
        //    //foreach (XTextElement element in tempList)
        //    //{
        //    //    if (element is XTextStringElement)
        //    //    {
        //    //        // 将文本元素拆分成多个字符元素
        //    //        int index = SourceList.IndexOf(element);
        //    //        XTextElementList cs = ((XTextStringElement)element).SplitChars();
        //    //        SourceList.RemoveAt(index);
        //    //        for (int iCount = 0; iCount < cs.Count; iCount++)
        //    //        {
        //    //            SourceList.Insert(index + iCount, cs[iCount]);
        //    //        }
        //    //        result = true;
        //    //    }
        //    //    else
        //    //    {
        //    //        //SourceList.Add(element);
        //    //    }
        //    //}
        //    //return result;
        //}

        /// <summary>
        /// 获得两个元素节点最近的共同的祖先元素
        /// </summary>
        /// <param name="element1">文档元素1</param>
        /// <param name="element2">文档元素2</param>
        /// <returns>共同的祖先元素</returns>
        public static DomElement GetRootElement(DomElement element1, DomElement element2)
        {
            if (element1 == null)
            {
                throw new ArgumentNullException("element1");
            }
            if (element2 == null)
            {
                throw new ArgumentNullException("element2");
            }

            if (element1 == element2)
            {
                return(element1);
            }
            DomElementList parents = new DomElementList();
            DomElement     parent  = element1;

            while (parent != null)
            {
                parents.Add(parent);
                parent = parent.Parent;
            }

            parent = element2;
            while (parent != null)
            {
                if (parents.Contains(parent))
                {
                    return(parent);
                }
                parent = parent.Parent;
            }
            return(null);
        }