天天躁日日躁狠狠躁AV麻豆-天天躁人人躁人人躁狂躁-天天澡夜夜澡人人澡-天天影视香色欲综合网-国产成人女人在线视频观看-国产成人女人视频在线观看

WPF Multi-Touch 開發:高級觸屏操作(Manipulation)

  在上一篇中我們對基礎觸控操作有了初步了解,本篇將繼續介紹觸碰控制的高級操作(Manipulatioin),在高級操作中包含了一些特殊的觸屏手勢:平移、縮放、旋轉,當然在WPF 中無需自行開發這些手勢,只需將UI 控件的IsManipulationEnabled 屬性激活,并通過以下四種事件完成各種觸屏手勢操作:ManipulationStarting、ManipulationStarted、ManipulationDelta、ManipulationInertiaStarting、ManipulationCompleted,下圖為各事件之間的工作順序及關系。

image_thumb_1

  創建項目

  新建項目在XAML 程序中寫入下面代碼,為<Canvas>設置ManipulationStarting、ManipulationDelta、ManipulationCompleted 事件,并在其中添加三張圖片,將Image 的IsManipulationEnabled 屬性均為"True",同時所有的Image 都添加了<MatrixTransform>對象,用于組合平移、縮放、旋轉操作。

<Window x:Class="WpfManipulation.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="500" Width="600">
<
Grid>
<
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></MatrixTransform>
</
Image.RenderTransform>
</
Image>
<
Image Canvas.Top="75" Canvas.Left="339" Width="200"
IsManipulationEnabled="True" Source="Images/P2.jpg">
<
Image.RenderTransform>
<
MatrixTransform></MatrixTransform>
</
Image.RenderTransform>
</
Image>
<
Image Canvas.Top="243" Canvas.Left="168" Width="200"
IsManipulationEnabled="True" Source="Images/P3.jpg">
<
Image.RenderTransform>
<
MatrixTransform></MatrixTransform>
</
Image.RenderTransform>
</
Image>
</
Canvas>
</
Grid>
</
Window>

XAML

  當觸碰到Image 圖片時,image_ManipulationStarting 事件將會自動觸發,首先需要定義ManipulationContainer(即為touchPad<Canvas>),該容器的主要用于定義參考坐標,圖片的任何操作均以參考坐標為準。ManipulationModes 設置可以限制哪些手勢操作是程序允許的,如果沒有特殊情況可設置為"All"。

private void image_ManipulationStarting(object sender, ManipulationStartingEventArgs e)
{
e.ManipulationContainer = touchPad;
e.Mode = ManipulationModes.All;
}

  ManipulationDelta 事件會在手勢操作開始時觸發,并且該手勢需持續進行不得間斷。通過FrameworkElement 獲得接受操作的圖片控件,將圖片透明度降低到0.5,創建Matrix 用于控制圖片MatrixTransform,利用Point 獲得圖片中心坐標點,通過ScaleAt、RotateAt、Translate 執行縮放、旋轉、平移操作。

private void image_ManipulationDelta(object sender, ManipulationDeltaEventArgs e)
{
FrameworkElement element = (FrameworkElement)e.Source;
element.Opacity = 0.5;

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

var deltaManipulation = e.DeltaManipulation;

Point center = new Point(element.ActualWidth / 2, element.ActualHeight / 2);
center = matrix.Transform(center);

matrix.ScaleAt(deltaManipulation.Scale.X, deltaManipulation.Scale.Y, center.X, center.Y);

matrix.RotateAt(e.DeltaManipulation.Rotation, center.X, center.Y);

matrix.Translate(e.DeltaManipulation.Translation.X, e.DeltaManipulation.Translation.Y);

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

  最后,當手指離開觸摸屏即操作結束,image_ManipulationCompleted 事件觸發,將圖片透明度重新調整為1。

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

  程序演示

  相關文章

  1. WPF Multi-Touch 開發:Windows 7 安裝多點觸屏模擬器
  2. WPF Multi-Touch 開發:基礎觸屏操作(Raw Touch)

 

  源碼下載:WpfManipulation.zip

NET技術WPF Multi-Touch 開發:高級觸屏操作(Manipulation),轉載需保留來源!

鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。

主站蜘蛛池模板: 午夜AV亚洲一码二中文字幕青青 | 欧美日韩一级黄色片 | 啪啪激情婷婷久久婷婷色五月 | 亚洲黄色录像片 | 色多多污污版免费下载安装 | 亚洲国产综合人成综合网站00 | 草民电影网午夜伦理电影网 | 精品无码人妻一区二区免费AV | 九九在线精品视频 | 国产白浆视频在线播放 | 亚洲国产在线观看免费视频 | 国产AV亚洲精品久久久久 | 四虎影5151毛片在线看 | 国产精品 日韩精品 欧美 | 99国产这里只有精品视频 | 亚洲 欧美无码原创区 | 免费成年人在线观看视频 | 国产午夜精品自在自线之la | 成人性视频全过程 | 毛片免费在线播放 | 浪荡女天天不停挨CAO日常视 | 毛片免费观看的视频 | 91麻精品国产91久久久久 | 一区二区三区无码被窝影院 | 芭乐草莓樱桃丝瓜18岁大全 | 亚洲综合AV在线在线播放 | 少妇高潮惨叫久久久久久欧美 | 日韩亚洲不卡在线视频 | 国产成人99久久亚洲综合精品 | 亚洲一区在线视频观看 | 久久sese| 泡妞高手在都市完整版视频免费 | 美女漏bb | 曰韩一本道高清无码av | 久久成人亚洲 | 男人J放进女人P全黄网站 | 亚洲免费无l码中文在线视频 | 国产在线精品一区二区网站免费 | 蜜桃成人在线 | 久久精麻豆亚洲AV国产品 | 色怕怕 |