none
wpf 在多点触控中如何限制缩放倍数? RRS feed

  • 常规讨论

  • ManipulationDelta(object sender, ManipulationDeltaEventArgs e)

    需要限制缩放倍数在1-3之间,2个Matrix能够计算他们的缩放倍数吗?

    2013年12月20日 7:43

全部回复

  • 根据这个MSDN文档中的例子,在Matrix.ScaleAt方法中进行限制应该就可以了:

    http://msdn.microsoft.com/en-us/library/ee649090(v=vs.110).aspx

    void Window_ManipulationDelta(object sender, ManipulationDeltaEventArgs e)
    {
    
        // Get the Rectangle and its RenderTransform matrix.
        Rectangle rectToMove = e.OriginalSource as Rectangle;
        Matrix rectsMatrix = ((MatrixTransform)rectToMove.RenderTransform).Matrix;
    
        // Rotate the Rectangle.
        rectsMatrix.RotateAt(e.DeltaManipulation.Rotation, 
                             e.ManipulationOrigin.X, 
                             e.ManipulationOrigin.Y);
    
        // Resize the Rectangle.  Keep it square 
        // so use only the X value of Scale.
        rectsMatrix.ScaleAt(e.DeltaManipulation.Scale.X, 
                            e.DeltaManipulation.Scale.X, 
                            e.ManipulationOrigin.X,
                            e.ManipulationOrigin.Y);
    
        // Move the Rectangle.
        rectsMatrix.Translate(e.DeltaManipulation.Translation.X,
                              e.DeltaManipulation.Translation.Y);
    
        // Apply the changes to the Rectangle.
        rectToMove.RenderTransform = new MatrixTransform(rectsMatrix);
    
        Rect containingRect =
            new Rect(((FrameworkElement)e.ManipulationContainer).RenderSize);
    
        Rect shapeBounds =
            rectToMove.RenderTransform.TransformBounds(
                new Rect(rectToMove.RenderSize));
    
        // Check if the rectangle is completely in the window.
        // If it is not and intertia is occuring, stop the manipulation.
        if (e.IsInertial && !containingRect.Contains(shapeBounds))
        {
            e.Complete();
        }
    
    
        e.Handled = true;
    }

    2013年12月23日 3:18
  • Matrix.ScaleAt进行限制的话,就必须知道当前是多少倍数,这样的话就需要每次变换前都要算出倍数且需要记录上一次的倍数。
    2013年12月24日 1:01