C# ViewportControl和图像-如何避免无休止的滚动
我正在编写一种地图(用于一个非常简单的游戏),它(目前)是一幅图像。 我希望用户能够滚动图像周围和调整大小。 我做了很多尝试,目前我正在使用ViewportControl,XAML看起来大致如下(见下文)。 我按照它所需要的方式工作-但是图像本身可以在ViewPortControl中滚动,没有任何边界。因此,图像会滚动消失 问题:是否有任何方法可以防止Viewportcontroll将图像滚动出指定区域C# ViewportControl和图像-如何避免无休止的滚动,c#,xaml,windows-phone-8,C#,Xaml,Windows Phone 8,我正在编写一种地图(用于一个非常简单的游戏),它(目前)是一幅图像。 我希望用户能够滚动图像周围和调整大小。 我做了很多尝试,目前我正在使用ViewportControl,XAML看起来大致如下(见下文)。 我按照它所需要的方式工作-但是图像本身可以在ViewPortControl中滚动,没有任何边界。因此,图像会滚动消失 问题:是否有任何方法可以防止Viewportcontroll将图像滚动出指定区域 <ViewportControl x:Name="viewport" Height="
<ViewportControl x:Name="viewport" Height="600" Width="440">
<Canvas x:Name="ParentCanvas" Background="Red" MaxHeight="600" MaxWidth="440">
<Image x:Name="MapImage" Source="/Artwork/map.png" RenderTransformOrigin="0.2,0.2" Stretch="UniformToFill" HorizontalAlignment="Left" VerticalAlignment="Center" Canvas.Left="-200" Canvas.Top="-300" Width="1320" Height="1800">
<Image.RenderTransform>
<CompositeTransform x:Name="transform" />
</Image.RenderTransform>
</Image>
<tk:GestureService.GestureListener>
<tk:GestureListener PinchStarted="OnPinchStarted" PinchDelta="OnPinchDelta" />
</tk:GestureService.GestureListener>
</Canvas>
</ViewportControl>
经过测试,我找到了解决问题的方法。 最重要的部分是向ViewportControl添加边界-标记,如下所示。 然后,滚动由ViewportControl本身处理。捏手势必须手动完成,但这是可能的,因为事件将到达正确的UI元素(此处:图像)。 在下面的示例中,我使用了来更轻松地处理事件
<ViewportControl x:Name="viewportCtrl" ScrollViewer.VerticalScrollBarVisibility="Visible" VerticalContentAlignment="Center" Bounds="0,0,1320,1800">
<Canvas x:Name="ParentCanvas" Background="Red" Height="1000" Width="800">
<Image x:Name="MapImage" Source="/Artwork/map.png" RenderTransformOrigin="0.2,0.2" >
<Image.RenderTransform>
<CompositeTransform x:Name="transform" />
</Image.RenderTransform>
</Image>
<Canvas x:Name="BlueCanvas" Top="100" Left="200" Background="Blue" Height="180" Width="180"></Canvas>
<tk:GestureService.GestureListener>
<tk:GestureListener PinchStarted="OnPinchStarted" PinchDelta="OnPinchDelta" />
</tk:GestureService.GestureListener>
</Canvas>
</ViewportControl>