WPF缩放画布并保持滚动位置

Ale*_*ide 9 wpf scroll canvas

我有一个Canvas元素,包含在ScrollViewer中,我正在使用ScaleTransform进行缩放.但是,我希望能够在缩放操作完成后将查看器的滚动位置保持在画布的同一部分上.目前,当我缩放画布时,观看者的滚动位置保持原样,用户正在查看的位置丢失.

我还在学习WPF,而且我一直在向后退一步,但我无法找到一个很好的基于XAML的方法来实现我想要的.在这个问题上的任何帮助将不胜感激,并将有助于我的学习过程.

这是我正在使用的那种代码......

<Grid>
    <ScrollViewer Name="TrackScrollViewer" HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Auto">
        <Canvas Width="2560" Height="2560" Name="TrackCanvas">
            <Canvas.LayoutTransform>
                <ScaleTransform ScaleX="{Binding ElementName=ZoomSlider, Path=Value}" 
                                ScaleY="{Binding ElementName=ZoomSlider, Path=Value}"/>
            </Canvas.LayoutTransform>

            <!-- Some complex geometry describing a motor racing circuit -->

        </Canvas>
    </ScrollViewer>
    <StackPanel Orientation="Horizontal" Margin="8" VerticalAlignment="Top" HorizontalAlignment="Left">
        <Slider Name="ZoomSlider" Width="80" Minimum="0.1" Maximum="10" Value="1"/>
        <TextBlock Margin="4,0,0,0" VerticalAlignment="Center" Text="{Binding ElementName=ZoomSlider, Path=Value, StringFormat=F1}"/>
    </StackPanel>
</Grid>
Run Code Online (Sandbox Code Playgroud)

And*_*ert 3

这不是纯粹的 XAML 方法,但 Joeyw 的博客上有一篇非常好的文章,标题为WPF 中的 Pan 和 Zoom(DeepZoom 样式),其中包含源链接。他从 DeepZoom 中获得了一些灵感,它为您提供了平滑/动画的平移和缩放内容。如果您使用的是 WPF 4,您可能可以对其进行一些修改,以向动画添加一些缓动功能,以赋予其更好的感觉。

  • 我有兴趣阅读此内容,但两个链接都已损坏。不过,我确实找到了一篇关于 CodeProject (http://www.codeproject.com/KB/WPF/DeepZoom.aspx) 的文章。 (2认同)