標籤:c style class blog code java
當Thumb跟隨Grid旋轉90度後,拖拽控制項時會飛掉。
<Grid x:Name="gridMain" Width="100" Height="50" Background="Green" RenderTransformOrigin="0.5,0.5" Canvas.Left="100" Canvas.Top="100"> <Grid.RenderTransform> <RotateTransform x:Name="rotate" Angle="90"></RotateTransform> </Grid.RenderTransform> <Thumb x:Name="thumbMain" Opacity="0.8" DragDelta="Thumb_DragDelta"></Thumb> </Grid>
private void Thumb_DragDelta(object sender, System.Windows.Controls.Primitives.DragDeltaEventArgs e) { Canvas.SetLeft(gridMain, Canvas.GetLeft(gridMain) + e.HorizontalChange); Canvas.SetTop(gridMain, Canvas.GetTop(gridMain) + e.VerticalChange); }
這是由於座標系不統一造成的。Canvas.SeltLeft 和 Canvas.SetTop是用的Canvas座標系。而Thumb的e.HorizontalChange 和 e.VerticalChange 是根據滑鼠相對於Thumb自身座標系計算出來的, 兩個座標系有個90度的角度差。將e.HorizontalChange 和 e.VerticalChange轉換到Canvas的座標系下,拖拽就沒問題了。如下:
private void Thumb_DragDelta(object sender, System.Windows.Controls.Primitives.DragDeltaEventArgs e) { Point ptChange = rotate.Transform(new Point(e.HorizontalChange, e.VerticalChange)); Canvas.SetLeft(gridMain, Canvas.GetLeft(gridMain) + ptChange.X); Canvas.SetTop(gridMain, Canvas.GetTop(gridMain) + ptChange.Y); }