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;
}
}