2013-06-24 64 views
1

我可以使用LayoutTransform旋轉畫布。但角落走出網格的寬度或高度。如何旋轉和調整畫布大小以將其保留在網格中。 這是我如何旋轉: -旋轉網格內的畫布

private void btnRotate_Click(object sender, RoutedEventArgs e) 
    { 
     if (RotationAngle == 360) 
     { 
      RotationAngle = 0; 
     } 
     RotationAngle = RotationAngle + 1; 

     RotateTransform rotateTransform = new RotateTransform(); 
     rotateTransform.Angle = RotationAngle; 
     TransformGroup transformGroup = new TransformGroup(); 
     transformGroup.Children.Add(rotateTransform); 
     rotateTransform.CenterX = 0.5; 
     rotateTransform.CenterY = 0.5; 
     cnvsYardMap.LayoutTransform = transformGroup; 
    } 

謝謝。

回答

2

如果Grid無法適應新的大小是孩子Canvas,那麼它的預期溢出邊界。

所以如果你有這樣的:

<Grid Height="200"> 
    <Canvas x:Name="blah" 
      Width="280" 
      Height="150" 
      Background="Tomato" /> 
</Grid> 

和你申請一個50deg LayoutTransform,這確實會溢出。

對於您正在嘗試的操作,您可以將Canvas包裝在ViewBox中。因此,像:

<Grid Height="200"> 
    <Viewbox> 
    <Canvas x:Name="blah" 
      Width="280" 
      Height="150" 
      Background="Tomato" /> 
    </Viewbox> 
</Grid> 

現在應用相同的變換將「出現」縮小Canvas大小父Grid內適應它。請注意,Viewbox縮放它的孩子比調整它們大小,所以它只是一個視覺效果。 CanvasWidthHeight仍然保持原來在變換之前的狀態。

+0

+1爲ViewBox ;-) – Aybe

+0

太棒了!謝謝Viv! – Chandan