@@ -56,6 +56,7 @@ public double Angle
56
56
private Vector startVector ;
57
57
public ElementAdorner ( UIElement adornedElement ) : base ( adornedElement )
58
58
{
59
+ canvas = FindParent ( adornedElement ) as Canvas ;
59
60
visualCollection = new VisualCollection ( this ) ;
60
61
visualCollection . Add ( tMove = CreateMoveThumb ( ) ) ;
61
62
visualCollection . Add ( tLeft = CreateThumb ( Cursors . SizeNWSE , HorizontalAlignment . Left ,
@@ -131,6 +132,13 @@ private Thumb CreateMoveThumb()
131
132
return thumb ;
132
133
}
133
134
135
+ UIElement FindParent ( UIElement element )
136
+ {
137
+ DependencyObject obj = element ;
138
+ obj = VisualTreeHelper . GetParent ( obj ) ;
139
+ return obj as UIElement ;
140
+ }
141
+
134
142
private Brush GetMoveEllipse ( )
135
143
{
136
144
return new DrawingBrush ( new GeometryDrawing ( Brushes . Transparent , null , null ) ) ;
@@ -166,13 +174,24 @@ private Thumb CreateThumb(Cursor cursor, HorizontalAlignment horizontal, Vertica
166
174
switch ( thumb . VerticalAlignment )
167
175
{
168
176
case VerticalAlignment . Bottom :
169
- if ( element . Height + e . VerticalChange > ElementMiniSize ) element . Height += e . VerticalChange ;
177
+ if ( element . Height + e . VerticalChange > ElementMiniSize )
178
+ {
179
+ var newHeight = element . Height + e . VerticalChange ;
180
+ var top = Canvas . GetTop ( element ) + newHeight ;
181
+ if ( newHeight > 0 && top <= canvas . ActualHeight )
182
+ element . Height = newHeight ;
183
+ }
170
184
break ;
171
185
case VerticalAlignment . Top :
172
186
if ( element . Height - e . VerticalChange > ElementMiniSize )
173
187
{
174
- element . Height -= e . VerticalChange ;
175
- Canvas . SetTop ( element , Canvas . GetTop ( element ) + e . VerticalChange ) ;
188
+ var newHeight = element . Height - e . VerticalChange ;
189
+ var top = Canvas . GetTop ( element ) + e . VerticalChange ;
190
+ if ( newHeight > 0 && top >= 0 )
191
+ {
192
+ element . Height = newHeight ;
193
+ Canvas . SetTop ( element , top ) ;
194
+ }
176
195
}
177
196
178
197
break ;
@@ -183,13 +202,24 @@ private Thumb CreateThumb(Cursor cursor, HorizontalAlignment horizontal, Vertica
183
202
case HorizontalAlignment . Left :
184
203
if ( element . Width - e . HorizontalChange > ElementMiniSize )
185
204
{
186
- element . Width -= e . HorizontalChange ;
187
- Canvas . SetLeft ( element , Canvas . GetLeft ( element ) + e . HorizontalChange ) ;
205
+ var newWidth = element . Width - e . HorizontalChange ;
206
+ var left = Canvas . GetLeft ( element ) + e . HorizontalChange ;
207
+ if ( newWidth > 0 && left >= 0 )
208
+ {
209
+ element . Width = newWidth ;
210
+ Canvas . SetLeft ( element , left ) ;
211
+ }
188
212
}
189
213
190
214
break ;
191
215
case HorizontalAlignment . Right :
192
- if ( element . Width + e . HorizontalChange > ElementMiniSize ) element . Width += e . HorizontalChange ;
216
+ if ( element . Width + e . HorizontalChange > ElementMiniSize )
217
+ {
218
+ var newWidth = element . Width + e . HorizontalChange ;
219
+ var left = Canvas . GetLeft ( element ) + newWidth ;
220
+ if ( newWidth > 0 && left <= canvas . ActualWidth )
221
+ element . Width = newWidth ;
222
+ }
193
223
break ;
194
224
}
195
225
0 commit comments