日期:2014-05-17  浏览次数:20674 次

wpf 多点触控的问题
想请问下..wpf中的多点触控 当控件在惯性时如何能让控件不超过window边框(即得到和窗口的相对偏移) .在下方的代码即为开始惯性 但是我不知道该如何得到控件时时相对窗体的偏移,只能在惯性之后才能得到.
 private void image_ManipulationInertiaStarting(object sender, ManipulationInertiaStartingEventArgs e)
        {  
            e.TranslationBehavior = new InertiaTranslationBehavior();
            e.TranslationBehavior.InitialVelocity = e.InitialVelocities.LinearVelocity;
            //e.TranslationBehavior.DesiredDeceleration = 10.0 * 96.0 / (1000.0 * 1000.0);
            e.TranslationBehavior.DesiredDeceleration = App.InteriaParam * 96.0 / (1000.0 * 1000.0);//数值越小惯性越大
            e.ExpansionBehavior = new InertiaExpansionBehavior();
            e.ExpansionBehavior.InitialVelocity = e.InitialVelocities.ExpansionVelocity;
            e.ExpansionBehavior.DesiredDeceleration = 0.1 * 96 / 1000.0 * 1000.0;

            e.RotationBehavior = new InertiaRotationBehavior();
            e.RotationBehavior.InitialVelocity = e.InitialVelocities.AngularVelocity;
            e.RotationBehavior.DesiredDeceleration = 720 / (1000.0 * 1000.0); 
        }

------解决方案--------------------

     private void Window_ManipulationDelta(object sender, ManipulationDeltaEventArgs e)
        {
            Rectangle rectToMove = e.OriginalSource as Rectangle;
            Matrix rectsMatrix = ((MatrixTransform)rectToMove.RenderTransform).Matrix;
          
            //旋转
            rectsMatrix.RotateAt(e.DeltaManipulation.Rotation, e.ManipulationOrigin.X, e.ManipulationOrigin.Y);
         
            //缩放
            rectsMatrix.ScaleAt(e.DeltaManipulation.Scale.X, e.DeltaManipulation.Scale.X,
                 e.ManipulationOrigin.X, e.ManipulationOrigin.Y
                );

            //移动


            if (_IfBorder) //如果物体到达边框,我执行的是反弹操作,直接移动变量取反了,动作很生硬,要是想反弹动作平滑,自己在这写算法