WPF масштабирование холста и сохранение позиции прокрутки

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

person Alex McBride    schedule 14.03.2010    source источник


Ответы (2)


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

person Andrew Bienert    schedule 14.03.2010
comment
Приведенная выше ссылка дает много подробностей, но загрузка была перемещена по ссылке с этой страницы: blogs.windowsclient.net/joeyw/archive/2009/06/02/ - person Drew Noakes; 02.09.2010
comment
Мне было интересно прочитать об этом, но обе ссылки не работают. Я нашел статью о CodeProject (codeproject.com/KB/WPF/DeepZoom.aspx) хотя. - person Tony; 15.04.2011

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

person Echilon    schedule 27.07.2013