2010-02-23 36 views
2

後,我學會了如何獲得的ScrollViewer的滾動條從這篇文章中的ScrollViewer內縮放元素後顯示:http://www.eightyeightpercentnerd.dreamhosters.com/?p=92的Silverlight:圍繞ScaleTransform

現在,我試圖讓縮放對象(在畫布這種情況下)在ScrollViewer中正確居中。我會讓圖片在這裏講述我的故事(請在Screencast.com清除我的文件之前幫助我)。 ;

我XAML:

<ScrollViewer x:Name="ScrollViewer" VerticalAlignment="Top" 
    VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Auto" 
    Width="300" Height="300" Margin="0" Padding="0" Background="White"> 

    <Canvas x:Name="DesignSurface" Background="Red"> 

     <Canvas x:Name="Surface" Background="Blue" Height="100" Width="100"> 
      <Canvas.RenderTransform> 
       <TransformGroup> 
        <ScaleTransform x:Name="SurfaceScaleTransform" /> 
       </TransformGroup> 
      </Canvas.RenderTransform> 
      <!-- ... --> 
     </Canvas> 

    </Canvas> 

</ScrollViewer> 

在初始負載,我的藍色帆布居中,並在100%: alt text

降低50%後,將藍色帆布仍然居中: alt text

增加400%後滾動顯示藍色畫布的左上角: alt text

增長400%和滾動顯示的藍色帆布的右下角後: alt text

所以我的問題僅僅是如何得到的ScrollViewer中或紅色帆布或任何正確中心的藍色帆布?

回答

5

也許我弄錯了,但你有沒有嘗試將RenderTransformOrigin設置爲Canvas?例如:

<Canvas x:Name="Surface" Background="Blue" Height="100" Width="100" 
      RenderTransformOrigin="0.5, 0.5"> 
     <Canvas.RenderTransform> 
      <TransformGroup> 
       <ScaleTransform x:Name="SurfaceScaleTransform" /> 
      </TransformGroup> 
     </Canvas.RenderTransform> 
     <!-- ... --> 
    </Canvas> 
+0

這就是我正在建議的。 – ChrisF 2010-02-23 21:40:22

+0

我嘗試使用RenderTransformOrigin併爲ScaleTransform設置CenterX和CenterY值,它可以很好地縮小但不起來。我只是通過設置基於某種邏輯的「藍色」畫布的頂部和左側值來解決我的問題(取決於縮放的「藍色」畫布是否小於或大於ScrollViewer。現在工作正常。感謝幫幫我。 – beaudetious 2010-02-23 21:57:17