none
怎么在WP7中实现图片的移动,放大,缩小??? RRS feed

  • 问题

  • 像win7下的图片浏览器一样···可以捕捉鼠标位置来实现图片的放大和缩小。 我找了好久,没找到··很多都是WPF上的··我不怎么会WPF··所以移植不过来。 自己写的代码,用鼠标滑轮来控制图片的大小,可是运行的时候没反映。 XAML的代码 <Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0"> <Image Name="img" Source="/MouseEven;component/IMG.jpg" Stretch="Fill" RenderTransformOrigin="0.5,0.5"> <Image.RenderTransform> <ScaleTransform x:Name="st"/> </Image.RenderTransform> </Image> </Grid> C#代码 private static double darger=1; private static double flag = 0.1; private void LayoutRoot_MouseWheel(object sender, MouseWheelEventArgs e) { if (e.Delta>0) { darger+=flag; } else { if (darger > flag) { darger -= flag; } } st.ScaleX = st.ScaleY = darger; } 高手们··麻烦指点下··谢谢了··我新手··刚刚接触,不知道哪错了··
    2011年4月20日 11:44

答案

  • 您可以参考多“MultiTouch Behavior for Windows Phone的例子,其实现了通过多点触控对于图片放大、缩小和旋转控制。

    MultiTouch Behavior for Windows Phone在CodePlex的下载地址: http://multitouch.codeplex.com/

    包含了Silverlight / Windows Phone 7 behaviors and WPF 4 samples ,您只要研究WP7Only.sln里实现的方法即可。因为在手机上使用的话,最终所有的操作还是通过手势控制,所以您掌握MultiTouch Behavior for Windows Phone是非常有用的。


    Cedar
    2011年4月20日 12:10
    版主

全部回复

  • 您可以参考多“MultiTouch Behavior for Windows Phone的例子,其实现了通过多点触控对于图片放大、缩小和旋转控制。

    MultiTouch Behavior for Windows Phone在CodePlex的下载地址: http://multitouch.codeplex.com/

    包含了Silverlight / Windows Phone 7 behaviors and WPF 4 samples ,您只要研究WP7Only.sln里实现的方法即可。因为在手机上使用的话,最终所有的操作还是通过手势控制,所以您掌握MultiTouch Behavior for Windows Phone是非常有用的。


    Cedar
    2011年4月20日 12:10
    版主
  • 噢·谢谢了···那个我看过了。。不过那个和我们老师给我的任务有点区别。

       老师给的任务是在WP7下实现图片的放大缩小 。像window7下的图片浏览器一样,捕捉鼠标的位置,从而放大一个区域。

    我查看了很多文档,也写了代码。

    void LayoutRoot_onMouseWheel(object sender, MouseWheelEventArgs e)
    {
    if (e.Delta > 0)
    {
    darger += flag;
    }
    else
    {
    if (darger > flag)
    {
    darger -= flag;
    }
    }
    st.ScaleX = st.ScaleY = darger;

    }

    这代码·在silvelight中就可以实现图片的放大缩小。但是换到WP7里就不行了。好像是没有焦点。

     

    在WP7下  MouseLeftButtonDown     MouseMove等等这些鼠标事件都可以实现图片的状态改变。

    只有MouseWheel不行,运行的时候,在图片上滚动滑轮没有反映。

     

    求助。。  

    2011年4月20日 13:21
  •  

    鼠标指针悬停在 UIElement 上时或 UIElement 具有焦点时,用户滚动鼠标滚轮。

    XAML

    <uiElement MouseWheel="eventhandler"/>s

    MouseWheel OnMouseWheel

    继承 MouseWheel 的控件可以通过重写 OnMouseWheel 方法来处理充当所有实例的处理程序的事件。这可能包括将事件的 Handled 值标记为 true,这一标记将导致取消进一步处理针对控件的任意实例(有时可能是控件的任意子类)的 MouseWheel 事件。

    还可以注册处理程序,以便即使是针对已处理的路由事件,也会调用这些处理程序。有关更多信息,请参见 AddHandler

    Control.OnMouseWheel 方法

    MouseWheel 事件发生之前调用,用于在不附加委托的情况下为派生类中的事件提供处理。

    在调用 MouseWheel 事件的任何事件处理程序之前调用 OnMouseWheel 方法。此方法启用派生类来处理 MouseWheel 事件,且不附加委托。这是在派生类中处理事件的首选技术。

    protected virtual void OnMouseWheel(
    MouseWheelEventArgs e
    )


    Cedar
    2011年4月21日 0:47
    版主
  • 我认为可能是您所说的没有获取到焦点,或者鼠标滚轴事件已经被处理。

    您可以使用Control.OnMouseWheel方法来处理,或者在鼠标悬停在Image时通过MouseMove 事件(鼠标的坐标位置更改并且悬停在 UIElement 上(或 UIElement 具有鼠标捕获时)设定焦点,使得Image控件的鼠标滚轴事件执行。


    Cedar
    2011年4月21日 0:54
    版主
  • 我现在写的事件可拖放Image··

    ····用鼠标的左键点击下去的时候捕获鼠标位置

    ··在鼠标移动的时候改变Image的坐标

    松开鼠标的时候放弃捕获鼠标位置

     

    当我点图片并拖放的时候,焦点这个时候在Image上吧·但是这个时候滚动滑轮··还是木响应。。。。

    ··

    ·····问了一些人说 WP7的是内核是windows CE```windows CE支持的鼠标是那种最基本的鼠标,只有左右键的,如果有第三个按键,就要有一个驱动程

     

    序。··但是WP7没有也不会有一个外设的滑轮。所以微软就没有写鼠标滑轮的驱动程序。。。。版主··是这样吗???

    ····唉不整了··转战多点触控·····毕竟最后还是要转到多点触控上的···谢谢版主了·······

    2011年4月21日 4:26
  •  

    ·····问了一些人说 WP7的是内核是windows CE```windows CE支持的鼠标是那种最基本的鼠标,只有左右键的,如果有第三个按键,就要有一个驱动程

     

    序。··但是WP7没有也不会有一个外设的滑轮。所以微软就没有写鼠标滑轮的驱动程序。。。。版主··是这样吗???

    ····唉不整了··转战多点触控·····毕竟最后还是要转到多点触控上的···谢谢版主了·······


    您上面提到的内容超出了我的知识范围,请高手为我们指点迷津吧。

    从msdn提供的资料(http://msdn.microsoft.com/zh-cn/library/system.windows.controls.control.onmousewheel(v=VS.95).aspx)来看,Windows Phone是支持MouseWheel事件的(http://msdn.microsoft.com/zh-cn/library/system.windows.uielement.mousewheel(v=VS.95).aspx)。

    我尝试了一下,也没有成功。使用UIElement.AddHandler 方法也没有成功。因为AddHandler中没有MouseWheel事件。

    要使用 AddHandler,路由事件必须公开作为事件标识符的公共静态字段,这是 routedEvent 参数所必需的。这只对 Silverlight 核心类中的有限事件集成立。

     


    Cedar
    2011年4月21日 6:40
    版主