Ejemplo n.º 1
0
        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)]);
                    }
                }
            }
        }
Ejemplo n.º 2
0
        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);
        }
Ejemplo n.º 3
0
        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();
            }
        }