2012-06-28 238 views
0

我們使用裝飾器在畫布上拖放,旋轉和調整對象大小。這很好,但是當所有的對象都在canvas或者它的一個子集上被選中,並且我們試着旋轉它們或者調整它們的大小時,每個對象都會朝不同的方向運行。專家可以給我們一些線索,看看能做些什麼?旋轉和調整對象大小

它將被大大的讚賞。

謝謝。

回答

2

我有類似的問題。這裏是我實施的代碼:

void DragThumb_DragDelta(object sender, DragDeltaEventArgs e) 
    { 
     DesignerItem designerItem = this.DataContext as DesignerItem; 
     DesignerCanvas designer = VisualTreeHelper.GetParent(designerItem) as DesignerCanvas; 
     if (designerItem != null && designer != null && designerItem.IsSelected) 
     { 
      double minLeft = double.MaxValue; 
      double minTop = double.MaxValue; 

      // we only move DesignerItems 
      var designerItems = designer.SelectionService.CurrentSelection.OfType<DesignerItem>(); 

      foreach (DesignerItem item in designerItems) 
      { 
       double left = Canvas.GetLeft(item); 
       double top = Canvas.GetTop(item); 

       minLeft = double.IsNaN(left) ? 0 : Math.Min(left, minLeft); 
       minTop = double.IsNaN(top) ? 0 : Math.Min(top, minTop); 
      } 

      double deltaHorizontal = Math.Max(-minLeft, e.HorizontalChange); 
      double deltaVertical = Math.Max(-minTop, e.VerticalChange); 

      foreach (DesignerItem item in designerItems) 
      { 
       RotateTransform rotateTransform = designerItem.RenderTransform as RotateTransform; 
       double left = Canvas.GetLeft(item); 
       double top = Canvas.GetTop(item); 

       if (double.IsNaN(left)) left = 0; 
       if (double.IsNaN(top)) top = 0; 

       if (rotateTransform != null) 
       { 
        Point dragDelta = new Point(e.HorizontalChange, e.VerticalChange); 
        dragDelta = rotateTransform.Transform(dragDelta); 
        Canvas.SetLeft(item, left + dragDelta.X); 
        Canvas.SetTop(item, top+ dragDelta.Y); 
       } 
       else 
       { 
        Canvas.SetLeft(item, left + deltaHorizontal); 
        Canvas.SetTop(item, top + deltaVertical); 
       } 
      } 

      designer.InvalidateMeasure(); 
      e.Handled = true; 
     } 
    } 

讓我知道你是否解決了這個問題。