2011-02-13 4 views
3

저는 간단한 캔버스를 가지고 있으며 캔버스의 부모로 스크롤 뷰를 추가해야합니다. 는하지만 난 후에 나타나거나 제대로하지 작동하지캔버스와 스크롤 뷰가있는 실버 라이트 줌 영역

canvas.RenderTransform=new ScaleTransform(){...} 

Scroolbars을 설정 문제 fased. 정보를 기쁘게 생각합니다.

답변

7

렌더링 변환은 UI 렌더링 프로세스에서 훨씬 나중에 발생합니다. 궁극적으로 컨트롤 렌더링에 대한 매트릭스 변환을 수행합니다. 스크롤 뷰어는이 변환을 완전히 인식하지 못합니다. 스크롤 막대는 원래 캔버스의 변형되지 않은 크기를 기반으로합니다.

실버 라이트 툴킷에는 LayoutTransformer 컨트롤이 포함되어 있습니다. 이 컨트롤은 레이아웃 프로세스의 일부로 컨텐트에 변환을 적용하고 변환 후 크기를 원하는 크기로보고합니다.

이 있다면 : - 그것을 더 크게 될 수 있도록 Canvas가 함유 스크롤 뷰어 (200)보다 작은 크기 (150)가

<ScrollViewer Width="200" Height="200" HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Auto"> 
     <toolkit:LayoutTransformer> 
      <toolkit:LayoutTransformer.LayoutTransform> 
       <ScaleTransform ScaleX="2" ScaleY="2" /> 
      </toolkit:LayoutTransformer.LayoutTransform> 
      <Canvas Width="150" Height="150" Background="Aquamarine"> 
       <Rectangle Fill="Blue" Canvas.Top="10" Canvas.Left="10" Width="30" Height="30" /> 
      </Canvas> 
     </toolkit:LayoutTransformer> 
    </ScrollViewer> 

동안, 그것 (300)를 확장한다. LayoutTransformer은 원하는 크기를 캔버스의 변환 후 크기 인 300으로보고합니다. 따라서 ScrollViewer는 스크롤 막대를 표시하여이를 수용합니다. LayoutTransformer의 이점이 없으면 ScrollViewer은 적용된 RenderTransform에도 불구하고 Canvas의 크기가 150으로 만 표시됩니다.

+3

내 날을 저장했습니다. – Evgeny