WPF зум холст и поддерживать положение прокрутки - PullRequest
9 голосов
/ 14 марта 2010

У меня есть элемент 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>

Ответы [ 2 ]

3 голосов
/ 14 марта 2010

Это не совсем XAML-способ, но в блоге Joeyw есть очень хорошая работа под названием Pan and Zoom (стиль DeepZoom) в WPF со ссылками на источник. Он черпал вдохновение из DeepZoom, и он дает вам плавное / анимированное панорамирование и масштабирование контента. И если вы используете WPF 4, вы, возможно, могли бы немного изменить его, добавив в анимацию некоторые функции замедления, чтобы придать ему еще более приятный вид.

0 голосов
/ 27 июля 2013

После тщательного поиска того же самого, я наткнулся на http://wpfextensions.codeplex.com/,, которые обеспечивают отличную функциональность из коробки.

...