2010-02-23 7 views
2

센터링 한 후 내가이 글에서의 ScrollViewer에 내 요소를 확장 한 후 표시 할 수있는 ScrollViewer의 스크롤 막대를 얻을하는 방법을 배웠습니다 : 지금 http://www.eightyeightpercentnerd.dreamhosters.com/?p=92실버 라이트 : 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 %에서 50 %로 감소 후 alt text

, 파란색 캔버스는 여전히 중심 : 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

+0

RenderTransformOrigin을 사용하고 ScaleTransform에 대한 CenterX 및 CenterY 값을 설정해 보았습니다. 그리고 스케일 업이 제대로 작동했지만 작동하지는 않았습니다. 난 그냥 문제가 해결되었습니다 "푸른"캔버스의 상단 및 왼쪽 값을 일부 로직을 기반으로 스케일링 된 "파란색"캔버스가 ScrollViewer보다 작거나 큰 경우에 따라. 그것은 지금 잘 작동합니다. 도움. – beaudetious