首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用LayoutTransform将夹点对准缩放

用LayoutTransform将夹点对准缩放
EN

Stack Overflow用户
提问于 2016-06-28 03:33:03
回答 1查看 586关注 0票数 1

更新1我相信我需要根据操纵原点值设置ScrollViewer的垂直和水平偏移量,以将图像保持在“夹点”之下。然而,我在如何计算这些值时遇到了麻烦。

作为一个更大的应用程序的一部分,我们希望用户能够捏-缩放并拖动到滚动查看器内部的图像。我下面的内容将允许摇摄和按压放大。然而,缩放似乎发生在左上角,我希望它以“夹点”为中心。我如何修改这段代码来做到这一点呢?我已经找到了一些示例,这些例子可以很好地用RenderTransform完成,但是无法解决如何使用LayoutTransforms来完成这些任务。

以下是我的xaml设置:

代码语言:javascript
复制
   <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>

下面是代码:

代码语言:javascript
复制
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
EN

回答 1

Stack Overflow用户

发布于 2016-06-28 05:56:24

设置变换的中心点。

代码语言:javascript
复制
<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版本一样,您可以更改CenterXCenterY属性ScaleTransform。但是,请注意,这两个属性不是点值,而是相对于自身从0.01.0的值。CenterX = 0.0/CenterY = 0.0指左上角,而CenterX = 1.0/CenterY = 1.0为右下角。你需要自己计算一下。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38066607

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档