Skip to content

Commit 4401d1e

Browse files
Merge pull request #28 from lifuhua123/master
update in ElementAdorner
2 parents cc34388 + 33adcf1 commit 4401d1e

File tree

1 file changed

+45
-2
lines changed

1 file changed

+45
-2
lines changed

src/WPFDevelopers.Shared/Controls/ElementAdorner/ElementAdorner.cs

Lines changed: 45 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -67,8 +67,24 @@ private Thumb CreateMoveThumb()
6767
var element = AdornedElement as FrameworkElement;
6868
if (element == null)
6969
return;
70-
Canvas.SetLeft(element, Canvas.GetLeft(element) + e.HorizontalChange);
71-
Canvas.SetTop(element, Canvas.GetTop(element) + e.VerticalChange);
70+
71+
var transform = element.RenderTransform;
72+
if (transform != null)
73+
{
74+
if (transform as RotateTransform != null)
75+
{
76+
var rotateTransform = transform as RotateTransform;
77+
78+
Point ptChange = rotateTransform.Transform(new Point(e.HorizontalChange, e.VerticalChange));
79+
80+
SetPositon(element, Canvas.GetLeft(element) + ptChange.X, Canvas.GetTop(element) + ptChange.Y);
81+
}
82+
else
83+
{
84+
SetPositon(element, Canvas.GetLeft(element) + e.HorizontalChange, Canvas.GetTop(element) + e.VerticalChange);
85+
}
86+
}
87+
7288
};
7389
return thumb;
7490
}
@@ -160,5 +176,32 @@ protected override Visual GetVisualChild(int index)
160176
{
161177
return visualCollection[index];
162178
}
179+
180+
private void SetPositon(FrameworkElement element,double left, double top)
181+
{
182+
var parent = VisualTreeHelper.GetParent(element) as Canvas;
183+
184+
if (left <= 0)
185+
{
186+
left = 0;
187+
}
188+
189+
if (top <= 0)
190+
{
191+
top = 0;
192+
}
193+
194+
if (left + element.Width > parent.ActualWidth)
195+
{
196+
left = parent.ActualWidth - element.Width;
197+
}
198+
if (top + element.Height > parent.ActualHeight)
199+
{
200+
top = parent.ActualHeight - element.Height;
201+
}
202+
203+
Canvas.SetLeft(element, left);
204+
Canvas.SetTop(element, top);
205+
}
163206
}
164207
}

0 commit comments

Comments
 (0)