@@ -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