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

vqlkdk9b  于 2023-03-19  发布在  其他
关注(0)|答案(1)|浏览(184)

我有一个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>
zwghvu4y

zwghvu4y1#

这并不是一种纯粹的XAML实现方式,但是Joeyw的博客上有一篇非常好的文章,标题是Pan and Zoom (DeepZoom style) in WPF,上面有源代码链接。他从DeepZoom中得到了一些灵感,它可以让你平滑/动画地平移和缩放内容。如果你使用的是WPF 4,你可能会稍微修改一下,给动画添加一些轻松的功能,让它有更好的感觉。

相关问题