Files
BrightSharp.Toolkit/BrightSharp/Diagrams/Thumbs/MoveThumb.cs

57 lines
2.1 KiB
C#
Raw Normal View History

2017-08-27 13:05:14 +03:00
using System;
using System.ComponentModel;
2017-02-18 00:15:59 +03:00
using System.Windows;
2017-01-09 13:25:52 +03:00
using System.Windows.Controls;
using System.Windows.Controls.Primitives;
using System.Windows.Media;
namespace Diagrams
{
2017-02-18 00:15:59 +03:00
[ToolboxItem(false)]
2017-01-09 13:25:52 +03:00
public class MoveThumb : Thumb
{
private RotateTransform rotateTransform;
private ContentControl designerItem;
2017-08-27 13:05:14 +03:00
private static int? zIndex = null;
2017-01-09 13:25:52 +03:00
2017-08-27 13:05:14 +03:00
public MoveThumb() {
DragStarted += MoveThumb_DragStarted;
DragDelta += MoveThumb_DragDelta;
DragCompleted += MoveThumb_DragCompleted;
2017-01-09 13:25:52 +03:00
}
2017-08-27 13:05:14 +03:00
private void MoveThumb_DragCompleted(object sender, DragCompletedEventArgs e) {
//TODO Need think about ZIndex changes
}
2017-01-09 13:25:52 +03:00
2017-08-27 13:05:14 +03:00
private void MoveThumb_DragStarted(object sender, DragStartedEventArgs e) {
2017-01-09 13:25:52 +03:00
this.designerItem = DataContext as ContentControl;
2017-08-27 13:05:14 +03:00
if (this.designerItem != null) {
2017-01-09 13:25:52 +03:00
this.rotateTransform = this.designerItem.RenderTransform as RotateTransform;
2017-08-27 13:05:14 +03:00
if (designerItem.GetBindingExpression(Panel.ZIndexProperty) == null) {
zIndex = Math.Max(zIndex ?? 0, Panel.GetZIndex(designerItem));
Panel.SetZIndex(designerItem, zIndex.Value + 1);
}
2017-01-09 13:25:52 +03:00
}
}
2017-08-27 13:05:14 +03:00
private void MoveThumb_DragDelta(object sender, DragDeltaEventArgs e) {
if (this.designerItem != null) {
2017-01-09 13:25:52 +03:00
Point dragDelta = new Point(e.HorizontalChange, e.VerticalChange);
2017-08-27 13:05:14 +03:00
if (this.rotateTransform != null) {
2017-01-09 13:25:52 +03:00
dragDelta = this.rotateTransform.Transform(dragDelta);
}
if (double.IsNaN(Canvas.GetLeft(this.designerItem))) Canvas.SetLeft(this.designerItem, 0);
if (double.IsNaN(Canvas.GetTop(this.designerItem))) Canvas.SetTop(this.designerItem, 0);
Canvas.SetLeft(this.designerItem, Canvas.GetLeft(this.designerItem) + dragDelta.X);
Canvas.SetTop(this.designerItem, Canvas.GetTop(this.designerItem) + dragDelta.Y);
2017-08-27 13:05:14 +03:00
2017-01-09 13:25:52 +03:00
}
}
}
}