WPF 移动图像

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
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 @   多见多闻  阅读(71)  评论(0编辑  收藏  举报
(评论功能已被禁用)
相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
点击右上角即可分享
微信分享提示