@@ -319,11 +319,20 @@ protected override Size ArrangeOverride(Size arrangeSize)
319319 }
320320 #endregion
321321
322+ PlacementOperation placementOp ;
323+ int dx = 0 ;
324+ int dy = 0 ;
325+
322326 private void DesignPanel_KeyUp ( object sender , KeyEventArgs e )
323327 {
324328 if ( e . Key == Key . Left || e . Key == Key . Right || e . Key == Key . Up || e . Key == Key . Down )
325329 {
326330 e . Handled = true ;
331+
332+ if ( placementOp != null ) {
333+ placementOp . Commit ( ) ;
334+ placementOp = null ;
335+ }
327336 }
328337 }
329338
@@ -333,28 +342,32 @@ void DesignPanel_KeyDown(object sender, KeyEventArgs e)
333342 {
334343 e . Handled = true ;
335344
336- var placementOp = PlacementOperation . Start ( Context . Services . Selection . SelectedItems , PlacementType . Move ) ;
345+ if ( placementOp == null ) {
346+ dx = 0 ;
347+ dy = 0 ;
348+ placementOp = PlacementOperation . Start ( Context . Services . Selection . SelectedItems , PlacementType . Move ) ;
349+ }
337350
338351
339- var dx1 = ( e . Key == Key . Left ) ? Keyboard . IsKeyDown ( Key . LeftShift ) ? - 10 : - 1 : 0 ;
340- var dy1 = ( e . Key == Key . Up ) ? Keyboard . IsKeyDown ( Key . LeftShift ) ? - 10 : - 1 : 0 ;
341- var dx2 = ( e . Key == Key . Right ) ? Keyboard . IsKeyDown ( Key . LeftShift ) ? 10 : 1 : 0 ;
342- var dy2 = ( e . Key == Key . Down ) ? Keyboard . IsKeyDown ( Key . LeftShift ) ? 10 : 1 : 0 ;
352+ dx + = ( e . Key == Key . Left ) ? Keyboard . IsKeyDown ( Key . LeftShift ) ? - 10 : - 1 : 0 ;
353+ dy + = ( e . Key == Key . Up ) ? Keyboard . IsKeyDown ( Key . LeftShift ) ? - 10 : - 1 : 0 ;
354+ dx + = ( e . Key == Key . Right ) ? Keyboard . IsKeyDown ( Key . LeftShift ) ? 10 : 1 : 0 ;
355+ dy + = ( e . Key == Key . Down ) ? Keyboard . IsKeyDown ( Key . LeftShift ) ? 10 : 1 : 0 ;
343356 foreach ( PlacementInformation info in placementOp . PlacedItems )
344357 {
345358 if ( ! Keyboard . IsKeyDown ( Key . LeftCtrl ) )
346359 {
347- info . Bounds = new Rect ( info . OriginalBounds . Left + dx1 + dx2 ,
348- info . OriginalBounds . Top + dy1 + dy2 ,
360+ info . Bounds = new Rect ( info . OriginalBounds . Left + dx ,
361+ info . OriginalBounds . Top + dy ,
349362 info . OriginalBounds . Width ,
350363 info . OriginalBounds . Height ) ;
351364 }
352365 else
353366 {
354367 info . Bounds = new Rect ( info . OriginalBounds . Left ,
355368 info . OriginalBounds . Top ,
356- info . OriginalBounds . Width + dx1 + dx2 ,
357- info . OriginalBounds . Height + dy1 + dy2 ) ;
369+ info . OriginalBounds . Width + dx ,
370+ info . OriginalBounds . Height + dy ) ;
358371 }
359372
360373 placementOp . CurrentContainerBehavior . SetPosition ( info ) ;
0 commit comments