Advertisement
Guest User

Untitled

a guest
Aug 31st, 2015
75
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.07 KB | None | 0 0
  1. private void AssociatedObjectOnMouseMove(object sender, MouseEventArgs mouseEventArgs)
  2. {
  3. Point currentPosition = mouseEventArgs.GetPosition(RelativeElement);
  4.  
  5. //Point currentPosition = mouseEventArgs.GetPosition(Window.GetWindow(this.AssociatedObject));
  6. if (!_isMousePressed || !this.AssociatedObject.IsMouseOver)
  7. return;
  8.  
  9. if (Math.Abs(_originalPosition.X - currentPosition.X) < SystemParameters.MinimumHorizontalDragDistance &&
  10. Math.Abs(_originalPosition.Y - currentPosition.Y) < SystemParameters.MinimumVerticalDragDistance)
  11. return;
  12.  
  13. IDragable context = this.AssociatedObject.DataContext as IDragable;
  14. if (context == null)
  15. return;
  16.  
  17.  
  18. Debug.WriteLine("Mouse leave");
  19. _adorner = new DefaultAdorner(this.AssociatedObject, new Point(0, 0), RelativeElement);
  20.  
  21. DataObject data = new DataObject();
  22. data.SetData(context.DataType, context);
  23. System.Windows.DragDrop.DoDragDrop(this.AssociatedObject, data, DragDropEffects.Move);
  24.  
  25. if (_adorner != null)
  26. {
  27. _adorner.Destroy();
  28. _adorner = null;
  29. }
  30.  
  31. _isMousePressed = false;
  32. }
  33.  
  34.  
  35. private void AssociatedObjectOnGiveFeedback(object sender, GiveFeedbackEventArgs giveFeedbackEventArgs)
  36. {
  37. Debug.WriteLine("feedback");
  38. Point mouseCoordinates = Extensions.GetMouseCoordinates();
  39. //Debug.WriteLine("initial x: {0}; y: {1}", mouseCoordinates.X, mouseCoordinates.Y);
  40. Point mousePosition = RelativeElement.PointFromScreen(mouseCoordinates);
  41.  
  42. AdornerLayer layer = AdornerLayer.GetAdornerLayer(this.AssociatedObject);
  43. var relative = RelativeElement.TranslatePoint(mousePosition, layer);
  44. Debug.WriteLine("relative to layer x: {0}; y: {1}", relative.X, relative.Y);
  45. var towindow = RelativeElement.TranslatePoint(mousePosition, Window.GetWindow(this.AssociatedObject));
  46. Debug.WriteLine("relative to layer x: {0}; y: {1}", towindow.X, towindow.Y);
  47. //Point mousePosition = Window.GetWindow(this.AssociatedObject).PointFromScreen(Extensions.GetMouseCoordinates());
  48. if (_adorner != null)
  49. {
  50. _adorner.SetMousePosition(mousePosition);
  51. }
  52. }
  53.  
  54. /// <summary>
  55. /// Create an adorner.
  56. /// The created adorner must then be added to the AdornerLayer.
  57. /// </summary>
  58. /// <param name="adornedElement">Element whose AdornerLayer will be use for displaying the adorner</param>
  59. /// <param name="adornerElement">Element used as adorner</param>
  60. /// <param name="adornerOrigin">Origin offset within the adorner</param>
  61. /// <param name="opacity">Adorner's opacity</param>
  62. public DefaultAdorner(UIElement adornedElement, Point origin, FrameworkElement relative)
  63. : base(adornedElement)
  64. {
  65. Rectangle rect = new Rectangle();
  66. rect.Width = adornedElement.RenderSize.Width;
  67. rect.Height = adornedElement.RenderSize.Height;
  68.  
  69. VisualBrush visualBrush = new VisualBrush(adornedElement);
  70. visualBrush.Opacity = 0.5;
  71. visualBrush.Stretch = Stretch.None;
  72. rect.Fill = visualBrush;
  73.  
  74.  
  75. this._child = rect;
  76.  
  77. this._adornerOrigin = new Point(0, 0);
  78.  
  79. this._adornerOffset = origin;
  80. _relative = relative;
  81. AdornerLayer layer = AdornerLayer.GetAdornerLayer(adornedElement);
  82.  
  83. Adorner[] adorners = layer.GetAdorners(adornedElement);
  84. if (adorners != null)
  85. {
  86. Array.ForEach(adorners, layer.Remove);
  87. }
  88.  
  89. layer.Add(this);
  90. InvalidateVisual();
  91. }
  92.  
  93. /// <summary>
  94. /// Set the position of and redraw the adorner.
  95. /// Call when the mouse cursor position changes.
  96. /// </summary>
  97. /// <param name="position">Adorner's new position relative to AdornerLayer origin</param>
  98. public void SetMousePosition(Point position)
  99. {
  100. this._adornerOffset.X = position.X;
  101. this._adornerOffset.Y = position.Y;
  102.  
  103.  
  104.  
  105. Debug.WriteLine("x: {0}; y: {1}", position.X, position.Y);
  106. Debug.WriteLine("x: {0}; y: {1}", position.X, position.Y);
  107. //this._adornerOffset.X = position.X - this._adornerOrigin.X - _child.Width / 2;
  108. //this._adornerOffset.Y = position.Y - this._adornerOrigin.Y - _child.Height / 2;
  109. UpdatePosition();
  110. }
  111.  
  112. private void UpdatePosition()
  113. {
  114. AdornerLayer adornerLayer = (AdornerLayer)this.Parent;
  115. if (adornerLayer != null)
  116. {
  117. adornerLayer.Update(this.AdornedElement);
  118. }
  119. //AdornerLayer.GetAdornerLayer(AdornedElement).Update();
  120. }
  121.  
  122. protected override int VisualChildrenCount { get { return 1; } }
  123.  
  124. protected override Visual GetVisualChild(int index)
  125. {
  126. System.Diagnostics.Debug.Assert(index == 0, "Index must be 0, there's only one child");
  127. return this._child;
  128. }
  129.  
  130. protected override Size MeasureOverride(Size finalSize)
  131. {
  132. this._child.Measure(finalSize);
  133. return this._child.DesiredSize;
  134. }
  135.  
  136. protected override Size ArrangeOverride(Size finalSize)
  137. {
  138. this._child.Arrange(new Rect(finalSize));
  139. return finalSize;
  140. }
  141.  
  142. public override GeneralTransform GetDesiredTransform(GeneralTransform transform)
  143. {
  144. Debug.WriteLine(transform);
  145.  
  146. GeneralTransformGroup newTransform = new GeneralTransformGroup();
  147. MatrixTransform tr = transform as MatrixTransform;
  148. if (tr != null)
  149. {
  150. //newTransform.Children.Add(base.GetDesiredTransform(new MatrixTransform(new Matrix(tr.Matrix.M11, tr.Matrix.M12, tr.Matrix.M21, tr.Matrix.M22, 0, 0))));
  151. //newTransform.Children.Add(base.GetDesiredTransform(new MatrixTransform(new Matrix(tr.Matrix.M11, tr.Matrix.M12, tr.Matrix.M21, tr.Matrix.M22, this._adornerOffset.X, this._adornerOffset.Y))));
  152. }
  153.  
  154. newTransform.Children.Add(base.GetDesiredTransform(transform));
  155. newTransform.Children.Add(new TranslateTransform(this._adornerOffset.X, this._adornerOffset.Y));
  156. return newTransform;
  157. }
  158.  
  159. public void Destroy()
  160. {
  161. AdornerLayer.GetAdornerLayer(AdornedElement).Remove(this);
  162. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement