private void AutoScrollToItem(Point currentPosition, FrameworkElement targetItem) { IList items = GetItems(TargetElement); if (TargetElement is ListBox && items != null && items.Count > 0) { ListBox listBox = TargetElement as ListBox; if (targetItem != null) { FrameworkElement itemsPanel = VisualTreeHelper.GetParent(targetItem) as FrameworkElement; Point currentPositionRelativeItemsPanel = TargetElement.TranslatePoint(currentPosition, itemsPanel); object item = targetItem.DataContext; if (item == null) { item = targetItem; } int currentIndex = items.IndexOf(item); if (currentPositionRelativeItemsPanel.Y < ScrollDataBound) { listBox.ScrollIntoView(items[Math.Max(0, currentIndex - 1)]); } else if (currentPositionRelativeItemsPanel.Y >= itemsPanel.ActualHeight - ScrollDataBound) { listBox.ScrollIntoView(items[Math.Min(items.Count - 1, currentIndex + 1)]); } } } }
protected override void OnDragStarted(double horizontalOffset, double verticalOffset) { TargetLayer.GuidelineFilter.Push(GetSizeGuidableLines); beginSize = (Vector)TargetElement.RenderSize; if (TargetLayer.Parent is IStoryboard) { beginPosition = new Vector( Canvas.GetLeft(TargetElement), Canvas.GetTop(TargetElement)); } else { var position = TargetElement.TranslatePoint(new Point(0, 0), (UIElement)TargetElement.Parent); beginThickness = TargetLayer.GetParentLayoutInfo().Margin; beginTargetThickness = TargetElement.Margin; beginThickness.Left *= -1; beginThickness.Top *= -1; beginBound = new Rect(position, (Size)beginSize); } positionLimit = new Vector( beginPosition.X + beginSize.X - TargetElement.GetDesignMinWidth(), beginPosition.Y + beginSize.Y - TargetElement.GetDesignMinHeight()); base.OnDragStarted(horizontalOffset, verticalOffset); }
private void UpdateInsertionAdorner(Point currentPosition, DependencyObject obj) { FrameworkElement listViewItem = Helpers.WPFVisualHelper.FindAncestor <ListBoxItem>(obj); if (listViewItem != null) { if (_insertionAdorner == null) { _insertionAdorner = new InsertionAdorner(listViewItem); AdornerLayer.Add(_insertionAdorner); } currentPosition = TargetElement.TranslatePoint(currentPosition, listViewItem); double halfHeight = listViewItem.ActualHeight / 2; _insertionAdorner.Position = (currentPosition.Y <= halfHeight) ? InsertionAdorner.InsertionPosition.Top : InsertionAdorner.InsertionPosition.Bottom; } else { RemoveAdorners(); } }