用于在Windows Phone 7上显示更大图像的控件

gyu*_*isc 3 silverlight windows-phone-7

我想在Windows Phone 7设备上显示更大的图像.我需要能够使用多点触控手势放大和缩小.我想知道是否有任何控件可以在Windows Phone 7 SDK中开箱即用?

Hen*_*y C 6

如果您不想使用DeepZoom,您还可以使用ViewBox来包含图像,并使用RenderTransform监听捏合触摸手势/事件以及放大和缩小ViewBox.

下面是我用于Silverlight应用程序的一些代码,可以更改某些工作以对Pinch和触摸手势做出反应,而不是鼠标滚轮+单击/拖动事件.也可以根据捏合手势的"强度"来改变缩放量.

对于在XAML中定义的视图框:

    <Border Name="viewboxBackground" Background="Black">
            <Viewbox Name="viewboxMain">
                <!--your content here -->
            </Viewbox>
    </Border>   
Run Code Online (Sandbox Code Playgroud)

代码隐藏:

    #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
Run Code Online (Sandbox Code Playgroud)

  • 对不起垃圾评论,但您可能也会发现此示例项目很有用 - http://blogs.msdn.com/b/ptorr/archive/2010/08/31/sample-code-from-teched-new-zealand- talks.aspx(在第一部分中寻找拖拽和捏合手势).在WP7上使用XNA进行触摸手势识别的这个链接也可能很有用 - http://blogs.msdn.com/b/nicgrave/archive/2010/07/12/touch-gestures-on-windows-phone-7. ASPX (2认同)