/// <summary> /// Determines whether the treeviewitem is on current page. /// </summary> /// <param name="treeViewItem">The tree view item.</param> /// <param name="itemsHostRect">The items host rect.</param> /// <param name="treeViewItemRect">The tree view item rect.</param> /// <returns> /// <c>true</c> if the treeview is on current page otherwise, <c>false</c>. /// </returns> private bool IsOnCurrentPage(TreeViewItem treeViewItem, out Rect itemsHostRect, out Rect treeViewItemRect) { // Get Rect for item host element FrameworkElement itemsHost = this.elementScrollViewer; itemsHostRect = new Rect(new Point(), new Point(itemsHost.RenderSize.Width, itemsHost.RenderSize.Height)); // Adjust Rect to account for padding Control itemsHostControl = itemsHost as Control; if (null != itemsHostControl) { Thickness padding = itemsHostControl.Padding; itemsHostRect = new Rect( itemsHostRect.Left + padding.Left, itemsHostRect.Top + padding.Top, Math.Max(0, itemsHostRect.Width - padding.Left - padding.Right), Math.Max(0, itemsHostRect.Height - padding.Top - padding.Bottom)); } // Get relative Rect for ListBoxItem GeneralTransform generalTransform = treeViewItem.TransformToVisual(itemsHost); treeViewItemRect = new Rect(generalTransform.Transform(new Point()), generalTransform.Transform(new Point(treeViewItem.RenderSize.Width, treeViewItem.RenderSize.Height))); // Return result return ((itemsHostRect.Top <= treeViewItemRect.Top) && (treeViewItemRect.Bottom <= itemsHostRect.Bottom)); }