internal void AddAdorner( AdornerLayer treeViewAdornerLayer, FrameworkElement adornedElement, ExplorerEFElement explorerElement, ExplorerFrame explorerFrame) { var adornerY = GetAdornerY(adornedElement, explorerElement, explorerFrame); if (adornerY >= 0) { SearchTickAdorner adorner; if (!_adorners.TryGetValue(adornerY, out adorner)) { adorner = new SearchTickAdorner(adornerY, adornedElement); _adorners[adornerY] = adorner; treeViewAdornerLayer.Add(adorner); // adding adorners in batches of 100 - see bug: Windows OS Bugs 1750717 if ((_adorners.Count % 100) == 0) { treeViewAdornerLayer.UpdateLayout(); } } adorner.AddExplorerElement(explorerElement); } }
internal static double GetAdornerY(FrameworkElement adornedElement, ExplorerEFElement explorerElement, ExplorerFrame explorerFrame) { var treeViewItemY = explorerFrame.GetY(explorerFrame.GetTreeViewItem(explorerElement, true)); // The adorner Y offset in the scrollbar adornedElement var size = SearchTickAdorner.GetRectangleSize(SearchTickAdorner.GetTickSize(adornedElement)); var padding = (Thickness)adornedElement.GetValue(Border.PaddingProperty); var y = padding.Top + ((adornedElement.ActualHeight - padding.Top - padding.Bottom) * treeViewItemY) / (explorerFrame.ScrollViewer.ExtentHeight); return(y - (y % size.Height) + size.Height); }
public AdornerAutomationPeer(SearchTickAdorner owner) : base(owner) { // do nothing }