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

  

posted @ 2022-08-11 08:59  多见多闻  阅读(77)  评论(0)    收藏  举报