2011-06-09 80 views
3

我有一个容器画布,里面装载了一个大尺寸的画布。我正在使用手势监听器方法。一些方法OnDragStarted,OnDragDelta和OnDragCompleted,我使用这些方法平移内部(较大尺寸)画布。Windows Phone 7 +画布+手势+ OnDrag事件+限制平移/拖动

问题在于我无法限制内部画布的平移,这意味着我应该能够在外部画布的边界内平移内部画布。

它如何做到这一点?

+0

我不太明白的问题。你实质上有一个窗户,外面的画布,看着一个更大的画布?如果你知道两个画布的尺寸,你可以计算内画布的运动范围,并且在聆听者方法内可以防止超出他们的运动。如果您发布相关代码的片段,我可以修改它们以提供此行为。 – expelledboy 2011-06-16 16:52:41

+0

Windows Phone 7 IE9不支持拖动事件...您必须使用原生的Silverlight/XNA/C#事件 – 2012-04-20 08:03:11

回答

0

我的理解是,您希望能够在外部画布内移动内部画布,并限制内部画布可以移动的程度。

此功能听起来非常类似于可拖动的地图效果。如果是这样,您是否能够使用自定义图像来调整地图控件以进行平移/缩放?

为了回答你的具体问题,虽然我知道,但当你处理你的GestureListenerGestureReceiver事件时,你需要检测内画布的当前位置。

然后,当你到达你的x,y点时停止移动,或者如果它已经在那个位置,阻止事件的执行。

0

我想你缺少的是定义你的外部画布的剪辑。你需要这样做的原因是,Canvas默认没有溢出:隐藏。它内部的任何实际上较大的孩子都会显示在它的边界之外。

您需要设置剪辑为您外画布是这样的:

<Canvas Width="200" Height="100">  
    <Canvas.Clip> 
     <RectangleGeometry Rect="0, 0, 200, 100"/> 
    </Canvas.Clip> 
</Canvas>