天天看点

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,如需转载请自行联系原作者

继续阅读