首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> 關於.NET

WPF 多點觸控開發:進階操作

     編輯:關於.NET

Manipulation 事件總覽

WPF 4 內建高階觸控事件,支援平移、縮放、旋轉等手勢。只需將 UIElement.IsManipulationEnabled = true,並處理下列事件:

  1. ManipulationStarting:初始化容器與模式。
  2. ManipulationStarted:手勢開始。
  3. ManipulationDelta:手勢進行中(核心計算)。
  4. ManipulationInertiaStarting:慣性啟動設定。
  5. ManipulationCompleted:手勢結束。

事件流程圖:

Manipulation 事件流程

範例:多圖片獨立操作

XAML 佈局

<Canvas x:Name="touchPad" Background="Gray"
    ManipulationStarting="image_ManipulationStarting"
    ManipulationDelta="image_ManipulationDelta"
    ManipulationCompleted="image_ManipulationCompleted">

    <Image Canvas.Top="52" Canvas.Left="34" Width="200"
        IsManipulationEnabled="True" Source="Images/P1.jpg">
        <Image.RenderTransform><MatrixTransform/></Image.RenderTransform>
    </Image>
    <Image Canvas.Top="75" Canvas.Left="339" Width="200"
        IsManipulationEnabled="True" Source="Images/P2.jpg">
        <Image.RenderTransform><MatrixTransform/></Image.RenderTransform>
    </Image>
    <Image Canvas.Top="243" Canvas.Left="168" Width="200"
        IsManipulationEnabled="True" Source="Images/P3.jpg">
        <Image.RenderTransform><MatrixTransform/></Image.RenderTransform>
    </Image>
</Canvas>

執行畫面:

三圖片操作畫面

事件處理程式碼

ManipulationStarting:設定參考座標與允許模式

private void image_ManipulationStarting(object sender, ManipulationStartingEventArgs e)
{
    e.ManipulationContainer = touchPad; // 參考座標系
    e.Mode = ManipulationModes.All;     // 允許平移/縮放/旋轉
}

ManipulationDelta:套用矩陣變換

private void image_ManipulationDelta(object sender, ManipulationDeltaEventArgs e)
{
    var element = (FrameworkElement)e.Source;
    element.Opacity = 0.5; // 操作中半透明

    Matrix matrix = ((MatrixTransform)element.RenderTransform).Matrix;
    var delta = e.DeltaManipulation;

    // 以元素中心為基準點
    Point center = new Point(element.ActualWidth / 2, element.ActualHeight / 2);
    center = matrix.Transform(center);

    matrix.ScaleAt(delta.Scale.X, delta.Scale.Y, center.X, center.Y);
    matrix.RotateAt(delta.Rotation, center.X, center.Y);
    matrix.Translate(delta.Translation.X, delta.Translation.Y);

    ((MatrixTransform)element.RenderTransform).Matrix = matrix;
}

ManipulationCompleted:恢復不透明

private void image_ManipulationCompleted(object sender, ManipulationCompletedEventArgs e)
{
    ((FrameworkElement)e.Source).Opacity = 1;
}

原始碼下載

WpfManipulation.zip

出處:https://www.cnblogs.com/gnielee/

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved