代码之家  ›  专栏  ›  技术社区  ›  Aaron Maenpaa

使用什么控件在Windows Phone 7上显示较大的图像

  •  3
  • Aaron Maenpaa  · 技术社区  · 14 年前

    我想在WindowsPhone7设备上显示更大的图像。我需要能够放大和缩小使用多点触摸手势。我想知道是否有任何控制,可以做到这一点,在WindowsPhone7SDK的开箱即用?

    3 回复  |  直到 14 年前
        1
  •  6
  •   Henry C    14 年前

    如果不想使用DeepZoom,也可以使用 ViewBox

    下面是我在Silverlight应用程序中使用的一些代码,通过一些工作可以将其更改为对捏和触摸手势的反应,而不是鼠标滚轮+单击/拖动事件。也可以根据捏手势的“力度”改变缩放量。

        <Border Name="viewboxBackground" Background="Black">
                <Viewbox Name="viewboxMain">
                    <!--your content here -->
                </Viewbox>
        </Border>   
    

    代码隐藏:

        #region Pan and Zoom Events and Handlers
    
        void MouseClickHandler(object sender, MouseButtonEventArgs e)
        {
            _mouseClickPos = e.GetPosition(viewboxBackground);
            bMoving = true;
        }
    
        void MouseMoveHandler(object sender, MouseEventArgs e)
        {
    
            if (bMoving)
            {
                //get current transform
                CompositeTransform transform = viewboxMain.RenderTransform as CompositeTransform;
    
                Point currentPos = e.GetPosition(viewboxBackground);
                transform.TranslateX += (currentPos.X - _mouseClickPos.X);
                transform.TranslateY += (currentPos.Y - _mouseClickPos.Y);
    
                viewboxMain.RenderTransform = transform;
    
                _mouseClickPos = currentPos;
            }
        }
    
        void MouseReleaseHandler(object sender, MouseButtonEventArgs e)
        {
            bMoving = false;
        }
    
        void MouseWheelZoom(object sender, MouseWheelEventArgs e)
        {
            if (e.Delta > 0)
            {
                _zoomMultiplier += _zoomRate;
                ApplyZoomTransform(viewboxMain, _zoomMultiplier, new Point(viewboxMain.ActualWidth / 2, viewboxMain.ActualHeight / 2));
            }
            else if (e.Delta < 0 && _zoomMultiplier > 1)
            {
                _zoomMultiplier -= _zoomRate;
                ApplyZoomTransform(viewboxMain, _zoomMultiplier, new Point(viewboxMain.ActualWidth / 2, viewboxMain.ActualHeight / 2));
            }
        }
    
        /// <summary>
        /// 
        /// </summary>
        /// <param name="element"></param>
        /// <param name="iZoomFactor"></param>
        /// <param name="zoomCenter">If provided, the zoom will be centered around the given position.</param>
        void ApplyZoomTransform(UIElement element, double iZoomFactor, Point? zoomCenter)
        {
            //get current transform
            CompositeTransform transform = viewboxMain.RenderTransform as CompositeTransform;
    
            if (zoomCenter != null)
            {
                transform.CenterX = zoomCenter.GetValueOrDefault().X;
                transform.CenterY = zoomCenter.GetValueOrDefault().Y;
            }
            transform.ScaleX = iZoomFactor;
            transform.ScaleY = iZoomFactor;
    
            element.RenderTransform = transform;
        }
    
        #endregion
    
        2
  •  2
  •   keyboardP    14 年前

    你可能对 DeepZoom . 不知道它支持多点触控手势的能力如何,但是你可以学习如何使用 gestures here 模拟多点触控 here ,如果多点触控支持不是标准。 下面是一个视频示例 DeepZoom on WP7 .