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