ManipulationDelta事件會是在觸摸位置發生變化是引發,比如可以根據使用者在觸控螢幕中移動的位置,圖片發生相應的位移,根據客戶兩手指在觸控螢幕上的位置,進行圖片的放大縮小;這裡用到的案例就是
<!--ContentPanel - 在此處放置其他內容--> <Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0"> <Image Source="1.jpg" x:Name="imgScale" Width="200" Height="200" ManipulationDelta="imgScale_ManipulationDelta" > </Image> </Grid>
效果:
從上面可以看到我們引用了一張圖片,並設定了ManipulationDelta事件,該事件的實現是:
private void imgScale_ManipulationDelta(object sender, ManipulationDeltaEventArgs e) { Image els = sender as Image; CompositeTransform ct = new CompositeTransform(); ct.TranslateX = 0; if (e.DeltaManipulation.Scale.X!=0||e.DeltaManipulation.Scale.Y!=0) { double maxOne = Math.Max(e.DeltaManipulation.Scale.Y, e.DeltaManipulation.Scale.X); ct.ScaleX *= maxOne; ct.ScaleY *= maxOne; } //e.IsInertial this.PageTitle.Text = "移動,X:" + e.ManipulationOrigin.X.ToString() + "\nY:" + e.ManipulationOrigin.Y.ToString(); ct.TranslateX = e.DeltaManipulation.Translation.X; ct.TranslateY = e.DeltaManipulation.Translation.Y; els.RenderTransform = ct; e.Handled = true; }
上述代碼的藐視:獲得xaml中已經執行個體的Ellipse對象,並執行個體化一個新的CompositeTransform對象,判斷縮放的比例是否為空白,如果不為空白,判斷在X軸和Y軸哪個比例較大,取較大者作為縮放比例,然後實現相應的位移;這裡用到的幾個知識點是:
sender as [元素類] 獲得發生該事件的元素
e.DeltaManipulation 獲得最近發生的更改
e.DeltaManipulation.Scale 官方:擷取操作已調整的作為乘數的量 (我的理解:擷取移動的值並作為放大縮小的比例值),可繼續點出對應的X,Y值
e.DeltaManipulation.Translation 擷取通過觸摸移動的尺寸,可繼續點出對應的X,Y值
e.ManipulationOrigin 獲得操作的起始點,可繼續點出對應的X,Y值
e.IsInertial 擷取是否在慣性運動期間發生
ManipulationDelta 事件,在上一篇中介紹到變換,你會發現很多文字都會超出文本所能承受的地區,此時就可以判斷文字的變換效果十分超出現實地區,如果超過,則e.complete(); 結束該觸摸事件
e.CumulativeManipulation 擷取累計的操作更改,類似於記錄
e.ManipulationContainer 擷取定義操作座標的容器,和sender as [元素類] 比如上列代碼的容器是Image
如果滑鼠進行類比,做水平向右移動,則效果是: