想请问下..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); 
        }

解决方案 »

  1.   

    ManipulationInertiaStarting
    事件 内的运算 是用来 说明  物体惯性的  比如 物体移动 的减速度是多少  物体在5秒内 停止移动 还是在10秒内停止移动  里面有个减速度参数什么的 
    这些运算是写在这个时间里的而你 需要的功能  物体 移动到 边框 要么 停止 要么 执行 反弹操作 这些运算 应该写在
    Window_ManipulationDelta 事件里
      

  2.   


         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) //如果物体到达边框,我执行的是反弹操作,直接移动变量取反了,动作很生硬,要是想反弹动作平滑,自己在这写算法
                {
                    rectsMatrix.Translate(-e.DeltaManipulation.Translation.X,
                              -e.DeltaManipulation.Translation.Y);
                }
                else
                {//没到边框继续 原坐标偏移量运动
                    rectsMatrix.Translate(e.DeltaManipulation.Translation.X,
                              e.DeltaManipulation.Translation.Y);
                }
                     rectToMove.RenderTransform = new MatrixTransform(rectsMatrix);            Rect containingRect =
                        new Rect(((FrameworkElement)e.ManipulationContainer).RenderSize);            Rect shapeBounds =
                    rectToMove.RenderTransform.TransformBounds(
                        new Rect(rectToMove.RenderSize));
                 
                if (e.IsInertial && !containingRect.Contains(shapeBounds))//物体已到达容器边框的判断
                {                _IfBorder = !_IfBorder;            }
                e.Handled = true;        }
      

  3.   

    请问一下你是用的笔记本开发的吗?我笔记本有多点功能,但是WPF程序识别不了。
    用模拟器在64位系统上不能用。