預設 ManipulationDelta 只在手指移動時更新位置,手指離開瞬間物件即停止,不符合真實物理直覺。WPF 提供 ManipulationInertiaStarting 事件,讓開發者定義平移、縮放、旋轉的初速度與減速度,模擬慣性滑動。
在 Canvas 加入事件繫結:
<Canvas x:Name="touchPad" Background="Gray"
ManipulationStarting="image_ManipulationStarting"
ManipulationDelta="image_ManipulationDelta"
ManipulationCompleted="image_ManipulationCompleted"
ManipulationInertiaStarting="image_ManipulationInertiaStarting">
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); // 10 inch/ms^2
// 縮放慣性
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); // 720 deg/ms^2
}
參數說明:
DesiredDeceleration 單位為 DIP/ms²(平移)、DIP/ms²(縮放)、度/ms²(旋轉)。數值越小滑動越遠。影片展示慣性效果:YouKu 線上觀看