Esempio n. 1
0
 protected override void OnVisualChildrenChanged(DependencyObject visualAdded, DependencyObject visualRemoved)
 {
     base.OnVisualChildrenChanged(visualAdded, visualRemoved);
     if (visualAdded != null)
     {
         FrameworkElement visual = visualAdded as FrameworkElement;
         Canvas.SetZIndex(visual, _maxZIndex);
         visual.RenderTransform     = new TranslateTransform();
         visual.VerticalAlignment   = Windows.VerticalAlignment.Top;
         visual.HorizontalAlignment = Windows.HorizontalAlignment.Left;
         visual.MouseDown          += (s, e) =>
         {
             double currentZIndex = Canvas.GetZIndex(visual);
             Canvas.SetZIndex(visual, ++_maxZIndex);
             _isMouseDownOnChild       = true;
             _mouseClickedChild        = visual;
             _dragMoveStartMargin      = visual.Margin;
             _dragMoveStartedPageIndex = _currentPageIndex;
             _dragMoveStartPosition    = e.GetPosition(null);
         };
         visual.MouseMove += (s, e) =>
         {
             if (AllowDragMoveChild && _isMouseDownOnChild && e.LeftButton == Input.MouseButtonState.Pressed && s.Equals(_mouseClickedChild))
             {
                 Point     currentMousePosition = e.GetPosition(null);
                 double    diffX      = currentMousePosition.X - _dragMoveStartPosition.X;
                 double    diffY      = currentMousePosition.Y - _dragMoveStartPosition.Y;
                 Thickness tempMargin = _dragMoveStartMargin;
                 tempMargin.Left = _dragMoveStartMargin.Left + diffX;
                 tempMargin.Top  = _dragMoveStartMargin.Top + diffY;
                 visual.Margin   = tempMargin;
                 double mouseXPostion = e.GetPosition(this).X;
                 if (mouseXPostion < 50)
                 {
                     if (!_isAnimating)
                     {
                         NavigateToPreviousPage();
                     }
                 }
                 else if (mouseXPostion > this.ActualWidth - 50)
                 {
                     if (!_isAnimating)
                     {
                         NavigateToNextPage();
                     }
                 }
             }
         };
         visual.MouseUp += (s, e) =>
         {
             if (_isMouseDownOnChild && _mouseClickedChild.Equals(visual))
             {
                 e.Handled           = true;
                 _isMouseDownOnChild = false;
                 int       pageIndex = _currentPageIndex;
                 Thickness margin    = visual.Margin;
                 margin.Left += (_currentPageIndex - _dragMoveStartedPageIndex) * this.Width;
                 //_dragMovedElements[visual] = margin;
                 visual.Margin = margin;
                 Duration tempDuration = NavigationAnimationDuration;
                 NavigationAnimationDuration = new Duration(TimeSpan.FromSeconds(0));
                 NavigateToPage(pageIndex, true);
                 NavigationAnimationDuration = tempDuration;
             }
         };
     }
 }