Windows 8.1 應用透過 UIElement.ManipulationMode 啟用觸控操作,支援平移、縮放、旋轉三大手勢。五大事件形成完整生命週期:
ManipulationStarting:初始化設定 (如容器、模式)ManipulationStarted:手勢開始ManipulationDelta:手勢進行中 (核心邏輯處理)ManipulationInertiaStarting:慣性動畫啟動 (鬆開手指後)ManipulationCompleted:手勢結束<Grid Background="{StaticResource ApplicationPageBackgroundThemeBrush}">
<Canvas>
<Image x:Name="imageElement"
Source="images/cliff.jpg"
Height="460" Width="758"
Canvas.Left="300" Canvas.Top="150"
ManipulationMode="All"
ManipulationStarting="image_ManipulationStarting"
ManipulationDelta="image_ManipulationDelta"
ManipulationCompleted="image_ManipulationCompleted">
<Image.RenderTransform>
<CompositeTransform x:Name="imageCT" />
</Image.RenderTransform>
</Image>
</Canvas>
</Grid>
private void image_ManipulationStarting(object sender, ManipulationStartingRoutedEventArgs e)
{
e.ManipulationContainer = this.imageElement; // 設定座標系容器
e.Mode = ManipulationModes.All; // 確認啟用所有模式
}
private void image_ManipulationDelta(object sender, ManipulationDeltaRoutedEventArgs e)
{
// 累加平移
this.imageCT.TranslateX += e.Delta.Translation.X;
this.imageCT.TranslateY += e.Delta.Translation.Y;
// 累加縮放 (以元素中心為基準)
this.imageCT.ScaleX *= e.Delta.Scale;
this.imageCT.ScaleY *= e.Delta.Scale;
// 累加旋轉
this.imageCT.Rotation += e.Delta.Rotation;
}
private void image_ManipulationCompleted(object sender, ManipulationCompletedRoutedEventArgs e)
{
// 可在此處理慣性結束後的邏輯,如吸附邊界
}
| 屬性 | 說明 |
|---|---|
ManipulationMode | All / TranslateX / TranslateY / Scale / Rotate / System (預關系統手勢) |
ManipulationContainer | 座標系參考元素,通常為父容器或自身 |
Delta.Translation | 單次移動向量 (X, Y) |
Delta.Scale | 縮放比例 (1.0 為基準) |
Delta.Rotation | 旋轉角度 (弧度) |
Velocities | 慣性速度 (Linear/Expansion/Angular),用於慣性動畫 |
ManipulationDelta 中檢查 CompositeTransform 邊界,超出時修正或取消操作。ManipulationInertiaStarting 設定 e.TranslationBehavior.DesiredDeceleration 等調整停止行為。e.PointerDeviceType 或 e.IsInertial 區分手指/滑鼠/觸控筆。掌握 Manipulation 事件流與 CompositeTransform 累加邏輯,即可實作流暢、自然的觸控互動體驗。建議搭配 VisualStateManager 處理狀態轉換,提升程式碼可維護性。