WPF 移动图像
private void Boutsidewrapper_PreviewMouseMove(object sender, System.Windows.Input.MouseEventArgs e) { if (BleftDown) { if (BisTranslateStart) { Point currentPoint = e.GetPosition(Boutside); //不能用 inside,必须用outside Vector v = currentPoint - BpreviousPoint; TransformGroup tg = Binside.RenderTransform as TransformGroup; tg.Children.Add(new TranslateTransform(v.X, v.Y)); //centerX和centerY用外部包装元素的坐标,不能用内部被变换的Canvas元素的坐标 // inside.RenderTransform = tg; BpreviousPoint = currentPoint; } e.Handled = true; } } bool BleftDown; Point BpreviousPoint; bool BisTranslateStart = false; double Boldscalimg = 0, Bscalimg = 1, Bscavs = 0; double Bimgx = 0, Bimgy = 0; private void Boutside_PreviewMouseUp(object sender, MouseButtonEventArgs e) { if (BleftDown) { if (BisTranslateStart) { BisTranslateStart = false; } e.Handled = true; } } private void Boutside_PreviewMouseWheel(object sender, MouseWheelEventArgs e) { Point currentPoint = e.GetPosition(Boutside); //不能用 inside,必须用outside TransformGroup tg = Binside.RenderTransform as TransformGroup; Bscavs = ((double)e.Delta) / 1000.0 + 1.0; Boldscalimg = Bscalimg; Bscalimg = Bscalimg * Bscavs; if (Bscalimg < 0.8) { Bscavs = 1; Bscalimg = Boldscalimg; } else if (Bscalimg > 2) { Bscavs = 1; Bscalimg = Boldscalimg; } //centerX和centerY用外部包装元素的坐标,不能用内部被变换的Canvas元素的坐标 tg.Children.Add(new ScaleTransform(Bscavs, Bscavs, currentPoint.X, currentPoint.Y)); e.Handled = true; } private void Boutsidewrapper_PreviewMouseDown(object sender, MouseButtonEventArgs e) { if (e.LeftButton == MouseButtonState.Pressed) { BleftDown = true; BpreviousPoint = e.GetPosition(Boutside); BisTranslateStart = true; e.Handled = true; } else { BleftDown = false; } }