public ElementNode ElementFromRange(ITextRange range) {
TreeNode item = null;
if (TextRange.Contains(this, range)) {
item = this;
for (int i = 0; i < this.Children.Count; i++) {
var child = Children[i];
if (range.End < child.Start)
break;
if (child.Contains(range.Start) && child.Contains(range.End)) {
item = (child.Children.Count > 0)
? child.ElementFromRange(range)
: child;
break;
}
}
}
return item as ElementNode;
}