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); }
//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); }