2010-03-14 6 views
9

ScaleTransform을 사용하여 확대/축소 할 ScrollViewer 내에 포함 된 Canvas 요소가 있습니다. 그러나 나는 확대/축소 작업이 끝나면 캔버스의 동일한 부분에 초점을 맞춘 뷰어의 스크롤 위치를 유지할 수 있기를 원합니다. 현재 캔버스를 확대/축소하면 뷰어의 스크롤 위치가 원래대로 유지되고 사용자가보고 있던 장소가 손실됩니다.WPF 줌 캔버스 및 스크롤 위치 유지

저는 아직 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> 

답변

3

이이 일을 순전히 XAML 방법이 아니다 ... 내가 사용하고 코드의 종류이지만, 함께 Pan and Zoom (DeepZoom style) in WPF 제목 Joeyw의 블로그에 작품의 아주 좋은 작품이있다 소스에 대한 링크. 그는 DeepZoom에서 영감을 얻었으며 콘텐츠의 부드럽게/움직이는 패닝 및 확대/축소를 제공합니다. WPF 4를 사용하는 경우 애니메이션에 약간의 여유 함수를 추가하여 조금 더 멋지게 만들 수도 있습니다.

+0

위 링크는 자세한 내용을 많이 제공하지만 다운로드는이 ​​페이지의 링크로 이동되었습니다. http://blogs.windowsclient.net/joeyw/archive/2009/06/02/pan-and-zoom- updated.aspx –

+2

나는 이것에 읽는 관심이 끌렸다 ​​그러나 연결의 양쪽은 부서진다. 하지만 CodeProject (http://www.codeproject.com/KB/WPF/DeepZoom.aspx)에 대한 기사를 찾았습니다. – Tony