如何使用WPF中的滑块放大和缩小图像?

时间:2012-06-22 12:15:18

标签: wpf image

我正在尝试使用滑块来控制放大和缩小任何图像。

我写了一段代码:

  private void image1_MouseMove(object sender, MouseEventArgs e)
        {
           if (!image1.IsMouseCaptured) return;
            var tt = (TranslateTransform)((TransformGroup)
      image1.RenderTransform).Children.First(tr => tr is TranslateTransform);
            Vector v = start - e.GetPosition(border1);
            tt.X = origin.X - v.X;
            tt.Y = origin.Y - v.Y;
        }

这里工作正常。使用鼠标滚动。但是我想使用滑块来实现相同的功能。

但无法使用滑块等鼠标滚动功能。 我是WPF及其控制的新手,所以对细节的任何帮助都非常感谢。

如何使用滑块实现放大的相同功能?

2 个答案:

答案 0 :(得分:3)

经过大量的研究和编码后,我发现它的应用非常简单,编码非常简单,使用滑块将Zoomin和Zoomout图像分开。你需要的是在你选择的区域放一个滑块。并输入以下代码。

private void slider1_ValueChanged(object sender, RoutedPropertyChangedEventArgs<double> e)
    {
        TransformGroup transformGroup = (TransformGroup)image1.RenderTransform;
        ScaleTransform transform = (ScaleTransform)transformGroup.Children[0];

        double zoom = e.NewValue; 
        transform.ScaleX = zoom;
        transform.ScaleY = zoom;
    }

现在我已经有了代码,因此使用鼠标滚轮可以使Zoomin和Zoomin成像。

    private void image1_MouseWheel(object sender, MouseWheelEventArgs e)
    {
        TransformGroup transformGroup = (TransformGroup)image1.RenderTransform;
        ScaleTransform transform = (ScaleTransform)transformGroup.Children[0];

        double zoom = e.Delta > 0 ? .2 : -.2;
        transform.ScaleX += zoom;
        transform.ScaleY += zoom;

        slider1.Value += zoom; 
    }

现在当你把

   slider1.value += zoom;

然后鼠标滚轮和滑块更改中的更改会更改图片的缩放。

记住鼠标滚轮和滑块之间的实现差异。在鼠标滚轮中,MouseWheelEventsArgs“e”和e.Delte值为正,负值取决于鼠标滚轮向上或鼠标滚轮向下。但是在Slider RoutedPropertyChangesEventsArgs值根据sldier上下都是正数或负数。您无需在此处指定。刚

 zoom = e.NewValue;

我希望它会有所帮助。

答案 1 :(得分:1)

您必须在代码中编写ScaleTransform代码。这是我执行此操作的代码的一部分,我不会放置所有内容,但它是您的基础。

对于滑块,您必须将Zoom属性绑定到Slider的值。

  private double m_dCurZoom = 1.0;
  private ScaleTransform m_transZoom;
  public ScaleTransform TransZoom
  {
     get { return m_transZoom; }
  }

  private TranslateTransform m_transPan;

  public double Zoom
  {
     get { return m_dCurZoom; }
     set
     {
        double oldzoom = m_dCurZoom;
        if (m_dCurZoom != value)
        {
           m_dCurZoom = value;
           OnPropertyChanged("Zoom");
           UpdateZoom(oldzoom);
        }
     }
  }

  public void UpdateZoom(double oldzoom)
  {
     // Are we visible?
     if (m_root == null)
        return;

     // Get parent
     FrameworkElement parent = GetRootParent();
     if (parent == null)
         return;

     // Center point of the window
     Point ptCenter = new Point(parent.RenderSize.Width / 2, parent.RenderSize.Height / 2);

     // Translate into canvas coordinates
     ptCenter = m_root.TranslatePoint(ptCenter, m_canvas);

     // Update the zoom
     m_transZoom.ScaleX = m_dCurZoom;
     m_transZoom.ScaleY = m_dCurZoom;
     m_transPan.X -= ptCenter.X * m_dCurZoom - ptCenter.X * oldzoom;
     m_transPan.Y -= ptCenter.Y * m_dCurZoom - ptCenter.Y * oldzoom;

     ResizeElementContents();

     OnPropertyChanged("Zoom");
  }