更新1 我相信我需要根据操纵原点值设置ScrollViewer的垂直和水平偏移量,以使图像保持在“捏”状态。但是,我在如何计算这些值方面遇到了麻烦。
作为更大型应用程序的一部分,我们希望用户能够进行缩放和拖动以平移滚动查看器内的图像。我下面的内容将允许平移和捏缩放。但是,变焦似乎是从左上角开始的,我希望它在“捏”下居中。如何修改此代码才能执行此操作? 我找到了使用RenderTransform完美实现这一功能的示例,但无法弄清楚如何使用LayoutTransforms进行此操作。
这是我的xaml设置:
<ScrollViewer Name="MainScrollViewer" HorizontalScrollBarVisibility="Visible" VerticalScrollBarVisibility="Visible" >
<Image Name="MainImage" Source="/test.jpg" Stretch="None" IsManipulationEnabled="True">
<Image.LayoutTransform>
<ScaleTransform x:Name="ScaleTrans"/>
</Image.LayoutTransform>
</Image>
</ScrollViewer>
这是背后的代码:
Private Sub MainImage_ManipulationStarting(sender As Object, e As ManipulationStartingEventArgs) Handles MainImage.ManipulationStarting
e.ManipulationContainer = MainScrollViewer
e.Handled = True
End Sub
Private Sub MainImage_ManipulationDelta(sender As Object, e As ManipulationDeltaEventArgs) Handles MainImage.ManipulationDelta
Dim delta = e.DeltaManipulation
Dim element = TryCast(e.Source, FrameworkElement)
If element IsNot Nothing Then
'Apply Scale Value
ScaleTrans.ScaleX *= delta.Scale.X
ScaleTrans.ScaleY *= delta.Scale.Y
'Panning
MainScrollViewer.ScrollToHorizontalOffset(MainScrollViewer.HorizontalOffset + delta.Translation.X * -1)
MainScrollViewer.ScrollToVerticalOffset(MainScrollViewer.VerticalOffset + delta.Translation.Y * -1)
End If
End Sub
答案 0 :(得分:0)
设置变换的中心点。
<ScrollViewer Name="MainScrollViewer" HorizontalScrollBarVisibility="Visible" VerticalScrollBarVisibility="Visible" >
<Image Name="MainImage" Source="/test.jpg" Stretch="None" IsManipulationEnabled="True">
<Image.LayoutTransform>
<ScaleTransform x:Name="ScaleTrans" CenterX="0.5" CenterY="0.5" />
</Image.LayoutTransform>
</Image>
</ScrollViewer>
如果你需要它相对于夹点的位置,请在后面编码。与xaml版本一样,您可以更改CenterX
的{{1}}和CenterY
属性。但请注意,这两个属性不是点值,而是相对于自身ScaleTransform
到0.0
的值。左上角是1.0
/ CenterX = 0.0
,而CenterY = 0.0
/ CenterX = 1.0
位于右下方。你需要自己做一些计算。