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

Silverlight 使用什么控件在Windows Phone 7上显示较大的图像,silverlight,windows-phone-7,Silverlight,Windows Phone 7,我想在windows phone 7设备上显示更大的图像。我需要能够放大和缩小使用多点触摸手势。我想知道在WindowsPhone7SDK中是否有任何控件可以实现这一点 您可能会感兴趣。不确定它对多点触控手势的支持程度,但如果多点触控支持不是标准,您可以学习如何使用和模拟多点触控。 以下是一个示例视频。如果您不想使用DeepZoom,您还可以使用来包含图像,听捏触手势/事件,并使用RenderTransform放大和缩小视口 下面是我在Silverlight应用程序中使用的一些代码,通过一些工作

我想在windows phone 7设备上显示更大的图像。我需要能够放大和缩小使用多点触摸手势。我想知道在WindowsPhone7SDK中是否有任何控件可以实现这一点

您可能会感兴趣。不确定它对多点触控手势的支持程度,但如果多点触控支持不是标准,您可以学习如何使用和模拟多点触控。
以下是一个示例视频。

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

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

对于XAML中定义的viewbox:

    <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
#区域平移和缩放事件和处理程序
void MouseClickHandler(对象发送器,MouseButtonEventArgs e)
{
_mouseClickPos=e.GetPosition(viewboxBackground);
b移动=真;
}
void MouseMoveHandler(对象发送器,MouseEventArgs e)
{
如果(b移动)
{
//获取当前变换
CompositeTransform transform=viewboxMain.RenderTransform作为CompositeTransform;
点currentPos=e.GetPosition(viewboxBackground);
transform.TranslateX+=(currentPos.X-_mouseClickPos.X);
transform.TranslateY+=(currentPos.Y-_mouseClickPos.Y);
viewboxMain.RenderTransform=变换;
_mouseClickPos=currentPos;
}
}
void MouseReleaseHandler(对象发送器,MouseButtonEventArgs e)
{
b移动=假;
}
void mouseweelZoom(对象发送器,mouseweelEventArgs e)
{
如果(e.Delta>0)
{
_zoomMultiplier+=\u zoomRate;
ApplyZoomTransform(viewboxMain,_zoomMultiplier,新点(viewboxMain.ActualWidth/2,viewboxMain.ActualHeight/2));
}
否则如果(e.Delta<0&&u zoomMultiplier>1)
{
_zoomMultiplier-=\u zoomRate;
ApplyZoomTransform(viewboxMain,_zoomMultiplier,新点(viewboxMain.ActualWidth/2,viewboxMain.ActualHeight/2));
}
}
/// 
/// 
/// 
/// 
/// 
///如果提供,缩放将围绕给定位置居中。
无效ApplyZoomTransform(UIElement元素、双iZoomFactor、点?zoomCenter)
{
//获取当前变换
CompositeTransform transform=viewboxMain.RenderTransform作为CompositeTransform;
如果(zoomCenter!=null)
{
transform.CenterX=zoomCenter.GetValueOrDefault().X;
transform.CenterY=zoomCenter.GetValueOrDefault().Y;
}
transform.ScaleX=iZoomFactor;
transform.ScaleY=iZoomFactor;
element.RenderTransform=转换;
}
#端区

你可能会发现劳伦特·布尼翁的多点触控行为值得一看


+1感谢您的评论。GalaSoft链接()非常有用。现在我了解到可以通过这种方式向控件添加行为并启用控件上的多点触控支持。请注意,我还没有在Windows Phone 7上实际测试过这一点,但我非常确定ViewBox和RenderTransform(这是实现缩放功能真正需要的)可供使用。感谢代码示例和使用Viewbox控件的建议。也许使用ViewBox和添加多点触摸行为是我需要使用的方式。尝试组合这些技术后,我将向您报告。有人向我指出,上面的代码缺少CompositeTransform的构造函数,因此上面的代码会在以下行中抱怨:“CompositeTransform transform=viewboxMain.RenderTransform as CompositeTransform;”-要解决此问题,您只需在某个点(可能在页面构造函数中)创建CompositeTransform()并将其分配给ViewBox:)很抱歉出现了垃圾邮件,但您可能会发现此示例项目很有用-(请参阅第一部分中的拖放手势)。关于在WP7上使用XNA进行触摸手势识别的链接可能也很有用-