我想显示用户提供的图片。这些图像可能比屏幕分辨率大(因此需要缩放和平移功能),而且图像可能无法正确定位到屏幕(因此需要能够旋转)。
实现平移和缩放似乎有点简单:
<ScrollViewer HorizontalSnapPointsType="None" HorizontalScrollBarVisibility="Auto" VerticalSnapPointsType="None" ZoomSnapPointsType="None" IsHorizontalRailEnabled="False" IsVerticalRailEnabled="False" ManipulationMode="All" VerticalScrollBarVisibility="Auto">
<Image x:Name="pannableImage" Source="{Binding FullSizedImage}" AutomationProperties.Name="{Binding Title}" />
</ScrollViewer>
虽然我希望能够设置初始缩放系数,但是如果图像大于屏幕,则设置缩放系数以使其填满屏幕并且如果图像如果不是大于屏幕,则设置缩放系数,使图像以完整大小显示,即不放大。
然而,我正在努力让轮换工作可以接受。我试过这个:
<ScrollViewer HorizontalSnapPointsType="None" HorizontalScrollBarVisibility="Auto" VerticalSnapPointsType="None" ZoomSnapPointsType="None" IsHorizontalRailEnabled="False" IsVerticalRailEnabled="False" ManipulationMode="All" VerticalScrollBarVisibility="Auto">
<Image x:Name="pannableImage" Source="{Binding FullSizedImage}" AutomationProperties.Name="{Binding Title}" >
<Image.Projection>
<PlaneProjection RotationZ="{Binding ImageRotation}"/>
</Image.Projection>
</Image>
</ScrollViewer>
虽然这会旋转图像,但问题是ScrollViewer会导致滚动错误。我也尝试将Projection放在ScrollViewer而不是Image上,这更糟糕。
将项目置于图像上似乎最有意义,因为ScrollViewer应该获得投影图像的尺寸,但似乎并非如此。
我在这里误解了什么?
感谢。
菲利普
答案 0 :(得分:1)
解决方案是使用RenderTransform而不是Projection:
<Image x:Name="pannableImage" Source="{Binding FullSizedImage}" ManipulationMode="All" Loaded="pannableImage_Loaded" IsDoubleTapEnabled="False" IsHitTestVisible="False" IsHoldingEnabled="False" IsRightTapEnabled="False" IsTapEnabled="False" ScrollViewer.VerticalScrollBarVisibility="Disabled" LayoutUpdated="pannableImage_LayoutUpdated">
<Image.RenderTransform>
<TransformGroup>
<ScaleTransform x:Name="Scale" />
<RotateTransform x:Name="Rotate" />
<TranslateTransform x:Name="Translate" />
</TransformGroup>
</Image.RenderTransform>
</Image>