wpf中图片旋转一定角度后的移动问题

埸萱 2013-08-17 10:58:41
刚刚接触wpf,遇到一个棘手的问题,盼解答.
问题如下,当通过 RotateTransform 将 image旋转一定角度后(约60度),再移动image就飞了.请问有人遇到过这样的问题吗?如何解决,是什么原因??
代码如下:
xaml:
<Window x:Class="Wpf_Transform_test.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="530" Width="682">
<Grid>
<Canvas Width="660" Height="491">
<Image Height="69" HorizontalAlignment="Left" Margin="164,199,0,0" Name="image1" Stretch="Fill" VerticalAlignment="Top" Width="186" Source="/Wpf_Transform_test;component/bin/PD.png" MouseWheel="image1_MouseWheel" MouseLeftButtonDown="image1_MouseLeftButtonDown" MouseLeftButtonUp="image1_MouseLeftButtonUp" MouseMove="image1_MouseMove" Canvas.Left="-57" Canvas.Top="-3" />
</Canvas>
</Grid>
</Window>

cs:
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
Slider slider = new Slider();
slider.Maximum = 360;
slider.Minimum = 0;
RotateTransform transform = new RotateTransform(slider.Value);
image1.RenderTransform = transform;

}

//旋转
private void image1_MouseWheel(object sender, MouseWheelEventArgs e)
{
UIElement el = sender as UIElement;
//设置旋转
double angle = (double)el.RenderTransform.GetValue(RotateTransform.AngleProperty);
if (e.Delta < 0)
{
angle += 2;
}
else
{
angle -= 2;
}
el.RenderTransform.SetValue(RotateTransform.AngleProperty, angle);
textBox1.Text = "left:" + Canvas.GetLeft(image1) + "top:" + Canvas.GetTop(image1) + "width:" + image1.ActualWidth + "height:" + image1.ActualHeight + "angle:" + image1.RenderTransform.GetValue(RotateTransform.AngleProperty).ToString();
}


//移动
private bool _isDrag = false;
private Point _dragOffset;

private void image1_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
UIElement el = sender as UIElement;
_isDrag = true;
_dragOffset = e.GetPosition(el);
el.CaptureMouse();
}

private void image1_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
{
UIElement el = sender as UIElement;
el.ReleaseMouseCapture();
//拖动
if (_isDrag == true)
{
_isDrag = false;
}
textBox1.Text = "left:" + Canvas.GetLeft(image1) + "top:" + Canvas.GetTop(image1) + "width:" + image1.ActualWidth + "height:" + image1.ActualHeight;

}

private void image1_MouseMove(object sender, MouseEventArgs e)
{
UIElement el = sender as UIElement;
if (e.LeftButton == MouseButtonState.Pressed)
{
if (_isDrag == true)
{
Point pt = e.GetPosition(el);
Canvas.SetLeft(el, Canvas.GetLeft(el) + pt.X - _dragOffset.X);
Canvas.SetTop(el, Canvas.GetTop(el) + pt.Y - _dragOffset.Y);
}
}
}
}
}


...全文
563 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
E次奥 2013-09-25
  • 打赏
  • 举报
回复
RotateTransform rotate;
  thumb.DragStarted += (s, e) =>
            {
rotate=el.RenderTransform as RotateTransform;

}
  thumb.DragDelta += (s, e) =>
            {
  Point dragDelta = new Point(e.HorizontalChange, e.VerticalChange);
   dragDelta = this.rotateTransform.Transform(dragDelta);
 Canvas.SetLeft(el, Canvas.GetLeft(el) + dragDelta.X);
  Canvas.SetTop(el, Canvas.GetTop(el) + dragDelta.Y);
}

1,978

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 其他语言讨论
社区管理员
  • 其他语言社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧