2010-03-14 52 views
9

我有一個Canvas元素,包含在ScrollViewer中,我正在使用ScaleTransform進行縮放。但是,我希望能夠在縮放操作完成後將查看器的滾動位置保持在畫布的相同部分上。目前,當我縮放畫布時,查看器的滾動位置停留在原來的位置,用戶正在查看的位置丟失。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的方式,但對Joeyw的博客一個非常好的作品的標題Pan and Zoom (DeepZoom style) in WPF與指向源的鏈接。他從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