代码之家  ›  专栏  ›  技术社区  ›  JP Hellemons

使用鼠标滚轮滚动并使用平移缩放图像

  •  0
  • JP Hellemons  · 技术社区  · 16 年前

    我想做一个小的silverlight应用程序,显示一个相当大的图像,可以放大滚动鼠标,然后用鼠标平移。 它类似于谷歌地图中的功能,我不想使用deepzoom。

    这是我目前的情况。请记住,这是我的第一个silverlight应用程序:

    初始图像的宽度为1800px。

        private void sc_MouseWheel(object sender, MouseWheelEventArgs e)
        {
            var st = (ScaleTransform)plaatje.RenderTransform;
            double zoom = e.Delta > 0 ? .1 : -.1;
            st.ScaleX += zoom;
            st.ScaleY += zoom;
        }
    

    居中的。

    找到了@ Pan & Zoom Image 把它转换成下面这个在silverlight中工作

        Point start;
        Point origin;
        bool captured = false;
    
        private void plaatje_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
        {
            plaatje.CaptureMouse();
            captured = true;
            var tt = (TranslateTransform)((TransformGroup)plaatje.RenderTransform)
                .Children.First(tr => tr is TranslateTransform);
            start = e.GetPosition(canvasje);
            origin = new Point(tt.X, tt.Y);
        }
    
        private void plaatje_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
        {
            plaatje.ReleaseMouseCapture();
            captured = false;
        }
    
        private void plaatje_MouseMove(object sender, MouseEventArgs e)
        {
            if (!captured) return;
    
            var tt = (TranslateTransform)((TransformGroup)plaatje.RenderTransform).Children.First(tr => tr is TranslateTransform);
            double xVerschuiving = start.X - e.GetPosition(canvasje).X;
            double yVerschuiving = start.Y - e.GetPosition(canvasje).Y;
            tt.X = origin.X - xVerschuiving;
            tt.Y = origin.Y - yVerschuiving;
        }
    

    所以缩放不平滑,平移不起作用,因为当我点击它时,图像消失了。

    1 回复  |  直到 8 年前
        1
  •  1
  •   alexander.biskop    16 年前

    我注意到的第一件事是:

    var st = (ScaleTransform)plaatje.RenderTransform;
    

    (TransformGroup)plaatje.RenderTransform
    

    对于缩放部分,您可能需要尝试设置 房地产转让

    干杯,亚历克斯

    推荐文章