C# Windows Phone:Can';无法使ViewportControl对齐
我尝试在WindowsPhone8Silverlight应用程序中使用ViewportControl类实现收缩和缩放已经有很长一段时间了,但没有成功。有一些很好的示例,例如,但我无法将我发现的示例映射到我的场景中 收缩和缩放效果很好,我遇到的问题是在操作完成后视口与内容对齐 我面临的主要问题是,操作完成后,我无法将缩放的内容(作为ViewportControl子级的XAML画布和子树)与视口对齐。这会导致视口(可滚动区域)的有效边界与我的内容偏移,导致我的部分内容无法访问/不可滚动 以下是我的操作算法:C# Windows Phone:Can';无法使ViewportControl对齐,c#,silverlight,xaml,windows-phone-8,pinchzoom,C#,Silverlight,Xaml,Windows Phone 8,Pinchzoom,我尝试在WindowsPhone8Silverlight应用程序中使用ViewportControl类实现收缩和缩放已经有很长一段时间了,但没有成功。有一些很好的示例,例如,但我无法将我发现的示例映射到我的场景中 收缩和缩放效果很好,我遇到的问题是在操作完成后视口与内容对齐 我面临的主要问题是,操作完成后,我无法将缩放的内容(作为ViewportControl子级的XAML画布和子树)与视口对齐。这会导致视口(可滚动区域)的有效边界与我的内容偏移,导致我的部分内容无法访问/不可滚动 以下是我的操
Canvas Size = 1025.69, 1641.11
Bounds = 0,0,1025.69,1641.11
viewport = -56,41.00,480,698
// Obtain transform between canvas and ViewportControl
GeneralTransform gt = m_MainCanvas.TransformToVisual(m_ViewportControl);
Rect newBounds = gt.TransformBounds(new Rect(0, 0, m_MainCanvas.Width, m_MainCanvas.Height));
m_ViewportControl.Bounds = newBounds;
// set the origin of the viewport again
m_ViewportControl.SetViewportOrigin(gt.Transform(new Point(0, 0)));
这会导致我的内容与视口不对齐
尝试,尝试,尽管我可能,我还不能找出我在这里做错了什么。。。即使在阅读了说明如何解决此问题的教程之后…:|
我想现在发生的是,我正在设置边界的rect大小正确,但是它的X和Y坐标是关闭的。我希望通过使用画布和ViewportControl本身之间的转换来解决这个问题,但显然不是这样
问题:如何正确设置ViewportControl的原点(如何计算要传递给SetViewportOrigin方法的点?有人能解释一下人们在缩放内容和视口之间使用的比例吗?我在其他示例中看到了如何破解这个比例
2014年7月8日更新
我在这里取得了一些进展。我的方法是在ViewportControl中的内容和控件本身之间进行转换,然后使用此方法在控件的空间中获得一个矩形以用作视口的边界,但这种方法不起作用。我的解决方法是简单地将渲染转换后的内容包装在画布中,然后调整其有效大小(渲染转换)大小。然后我将边界设置为该大小,最后我终于有了很好的反弹效果
我现在面临的问题是,当我调整画布的大小并重置视口的边界时,内容会捕捉到视口的左上角,不再以用户提供的收缩区域为中心
有人能帮我理解SetViewportOrigin方法在ViewportControl上的工作原理吗?我看到一些非常奇怪的数据,它们是在挤压操作后视口与画布的数据:
Canvas Size = 1025.69, 1641.11
Bounds = 0,0,1025.69,1641.11
viewport = -56,41.00,480,698
当我甚至不调用SetViewportOrigin(点)时,为什么视口偏移为非零值(x,y=-56,41)
下面是我对SetViewportOrigin(点)的想法方法有效:假设我的视口控件本身大小为400 x 400像素,我的内容为800 x 800像素。如果我将视口原点设置为100,100,则内容将滚动,以便前100个垂直和100个水平像素将被剪裁/遮罩/屏幕外。ViewportControl不是这样工作的吗?I Figure我明白了这一点,现在我是一个快乐的露营者。事实证明,我使用了错误的坐标空间将视口原点设置为一个点。我在想,如果我想将内容移动到某个位置,我会在视口的坐标空间中提供该点,并且内容会滚动(设置内容的左上角点)。我发现SetViewportOrigin方法获取的点数据位于内容的坐标空间中。例如:如果内容的宽度为500 x 500像素,则视口的宽度为400 x 400像素,并且希望视口遮罩前100个垂直像素和100个水平像素(显示内容的右下角),您可以将原点设置为100100,而不是-100100 我在坐标空间之间做了一些无用的转换,试图在视口的坐标系中传递一个点