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

У меня есть элемент Холста, содержавший в 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>
9
задан Alex McBride 14 March 2010 в 07:18
поделиться

1 ответ

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

3
ответ дан 3 November 2019 в 08:20
поделиться
Другие вопросы по тегам:

Похожие вопросы: