SearchControlPosition GetsearchControlPosition(SnapshotSpan span) { if (!IsSearchControlVisible) return SearchControlPosition.Default; var infos = new PositionInfo[] { // Sorted on preferred priority new PositionInfo(SearchControlPosition.TopRight, TopRightRect), new PositionInfo(SearchControlPosition.BottomRight, BottomRightRect), }; Debug.Assert(infos.Length != 0 && infos[0].Position == SearchControlPosition.Default); foreach (var line in wpfTextView.TextViewLines.GetTextViewLinesIntersectingSpan(span)) { foreach (var info in infos) { if (Intersects(span, line, info.Rect)) info.IntersectsSpan = true; } } var info2 = infos.FirstOrDefault(a => !a.IntersectsSpan) ?? infos.First(a => a.Position == SearchControlPosition.Default); return info2.Position; }