【问题标题】:WPF zoom canvas and maintain scroll positionWPF 缩放画布并保持滚动位置
【发布时间】:2010-03-14 17:18:31
【问题描述】:

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

【问题讨论】:

    标签: wpf scroll canvas


    【解决方案1】:

    这不是纯粹的 XAML 方式,但 Joeyw 的博客上有一篇非常不错的作品,标题为 Pan and Zoom (DeepZoom style) in WPF,其中包含指向源代码的链接。他从 DeepZoom 中获得了一些灵感,它为您提供了平滑/动画平移和缩放内容。如果您使用的是 WPF 4,您可能会对其稍作修改,以在动画中添加一些缓动功能,以使其具有更好的感觉。

    【讨论】:

    猜你喜欢
    • 2016-11-02
    • 1970-01-01
    • 1970-01-01
    • 2014-11-07
    • 1970-01-01
    • 2018-03-07
    • 2012-10-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多