天天看點

windows phone (17) ManipulationDelta事件

MainPage.xaml主要代碼:

 <!--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事件,該事件的實作是:

View Code

  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.CumulativeManipulation 擷取累計的操作更改,類似于曆史記錄

 e.ManipulationContainer  擷取定義操作坐标的容器,和sender as [元素類] 比如上列代碼的容器是Image

如果滑鼠進行模拟,做水準向右移動,則效果是:

本文轉自shenzhoulong  51CTO部落格,原文連結:http://blog.51cto.com/shenzhoulong/841283,如需轉載請自行聯系原作者

繼續閱讀