示例#1
0
        private static void AnimateToPosition(DependencyObject d, Rect desiredPosition)
        {
            Rect position = ArrangePanel.GetPosition(d);

            if (double.IsNaN(position.X))
            {
                ArrangePanel.SetPosition(d, desiredPosition);
            }
            else
            {
                Vector vector  = desiredPosition.TopLeft - position.TopLeft;
                double length1 = vector.Length;
                vector = desiredPosition.BottomRight - position.BottomRight;
                double        length2        = vector.Length;
                TimeSpan      timeSpan       = TimeSpan.FromMilliseconds(Math.Max(length1, length2) * 1.0);
                RectAnimation rectAnimation1 = new RectAnimation(position, desiredPosition, new Duration(timeSpan));
                rectAnimation1.DecelerationRatio = 1.0;
                RectAnimation rectAnimation2 = rectAnimation1;
                if (!(d is UIElement uiElement))
                {
                    return;
                }
                uiElement.BeginAnimation(ArrangePanel.PositionProperty, (AnimationTimeline)rectAnimation2);
            }
        }
示例#2
0
        private static void OnDesiredPositionChanged(
            DependencyObject d,
            DependencyPropertyChangedEventArgs e)
        {
            Rect newValue = (Rect)e.NewValue;

            ArrangePanel.AnimateToPosition(d, newValue);
        }
示例#3
0
        private void DoReordering(MouseEventArgs e)
        {
            e.Handled = true;
            Point position = e.GetPosition((IInputElement)this);

            ArrangePanel.SetOrder((DependencyObject)this._draggingObject, this._strategy.GetIndex(position));
            ArrangePanel.SetPosition((DependencyObject)this._draggingObject, new Rect(position + this._delta, ArrangePanel.GetPosition((DependencyObject)this._draggingObject).Size));
        }
示例#4
0
        private void InitializeEmptyOrder()
        {
            int num = this.Children.OfType <UIElement>().Max <UIElement>((Func <UIElement, int>)(ch => ArrangePanel.GetOrder((DependencyObject)ch))) + 1;

            foreach (DependencyObject dependencyObject in this.Children.OfType <UIElement>().Where <UIElement>((Func <UIElement, bool>)(child => ArrangePanel.GetOrder((DependencyObject)child) == -1)))
            {
                ArrangePanel.SetOrder(dependencyObject, num);
                ++num;
            }
        }
示例#5
0
 protected override Size ArrangeOverride(Size finalSize)
 {
     foreach (UIElement uiElement in (IEnumerable <UIElement>) this.Children.OfType <UIElement>().OrderBy <UIElement, int>(new Func <UIElement, int>(ArrangePanel.GetOrder)))
     {
         Rect finalRect = ArrangePanel.GetPosition((DependencyObject)uiElement);
         if (double.IsNaN(finalRect.Top))
         {
             finalRect = ArrangePanel.GetDesiredPosition((DependencyObject)uiElement);
         }
         uiElement.Arrange(finalRect);
     }
     return(this._strategy.ResultSize);
 }
示例#6
0
        private void StartReordering(MouseEventArgs e)
        {
            if (e == null || !(e.OriginalSource is UIElement originalSource))
            {
                return;
            }
            this._startPosition  = e.GetPosition((IInputElement)this);
            this._draggingObject = this.GetMyChildOfUiElement(originalSource);
            this._draggingObject.SetValue(Panel.ZIndexProperty, (object)100);
            Rect position = ArrangePanel.GetPosition((DependencyObject)this._draggingObject);

            this._delta = position.TopLeft - this._startPosition;
            this._draggingObject.BeginAnimation(ArrangePanel.PositionProperty, (AnimationTimeline)null);
            ArrangePanel.SetPosition((DependencyObject)this._draggingObject, position);
        }
示例#7
0
        private void StopReordering()
        {
            if (this._draggingObject == null)
            {
                return;
            }
            this._draggingObject.ClearValue(Panel.ZIndexProperty);
            this.InvalidateMeasure();
            ArrangePanel.AnimateToPosition((DependencyObject)this._draggingObject, ArrangePanel.GetDesiredPosition((DependencyObject)this._draggingObject));
            this._draggingObject = (UIElement)null;
            Action reOrderedEvent = this.ReOrderedEvent;

            if (reOrderedEvent == null)
            {
                return;
            }
            reOrderedEvent();
        }
示例#8
0
        protected override Size MeasureOverride(Size availableSize)
        {
            this.InitializeEmptyOrder();
            if (this._draggingObject != null)
            {
                this.ReorderOthers();
            }
            Size[] sizes = this.MeasureChildren();
            this._strategy.Calculate(availableSize, sizes);
            int index = -1;

            foreach (UIElement uiElement in (IEnumerable <UIElement>) this.Children.OfType <UIElement>().OrderBy <UIElement, int>(new Func <UIElement, int>(ArrangePanel.GetOrder)))
            {
                ++index;
                if (uiElement != this._draggingObject)
                {
                    ArrangePanel.SetDesiredPosition((DependencyObject)uiElement, this._strategy.GetPosition(index));
                }
            }
            return(this._strategy.ResultSize);
        }
示例#9
0
        private void ReorderOthers()
        {
            int order1 = ArrangePanel.GetOrder((DependencyObject)this._draggingObject);
            int num    = 0;

            foreach (UIElement uiElement in (IEnumerable <UIElement>) this.Children.OfType <UIElement>().OrderBy <UIElement, int>(new Func <UIElement, int>(ArrangePanel.GetOrder)))
            {
                if (num == order1)
                {
                    ++num;
                }
                if (uiElement != this._draggingObject)
                {
                    int order2 = ArrangePanel.GetOrder((DependencyObject)uiElement);
                    if (num != order2)
                    {
                        ArrangePanel.SetOrder((DependencyObject)uiElement, num);
                    }
                    ++num;
                }
            }
        }