2009-09-08 5 views
1

나는 수천 개의 다각형을 추가 한 Canvas가 있습니다.Silverlight - 다각형 스케일링 및 클리핑

나는 내가 ScaleTransform을 통해하고 있어요하는 (확대 할 수 있도록하고 싶습니다.

난 단지 캔버스의 일부를 그리는 방법뿐만 아니라 Canvas.Clip를 사용하려고했습니다 그러나, 하지만 즉시 ScaleTransform 값이 변경 될 때, 클리핑은

<Canvas Grid.Row="1" Margin="10" x:Name="cnvMain" Background="Transparent" > 
     <Canvas.Clip> 
      <RectangleGeometry x:Name="CanvasClip" Rect="0, 0, 300, 300"/> 
     </Canvas.Clip> 
     <Canvas.RenderTransform> 
      <ScaleTransform x:Name="CanvasScaleTransform" ScaleX="1" ScaleY="1"></ScaleTransform> 
     </Canvas.RenderTransform> 
    </Canvas> 

그리고 내 코드 숨김에서

private void slScale_ValueChanged(object sender, RoutedPropertyChangedEventArgs<double> e) 
    { 
     CanvasScaleTransform.ScaleX = slScale.Value; 
     CanvasScaleTransform.ScaleY = slScale.Value; 
    } 

내가 분명히 뭔가 잘못을하고 있는가 ... 작동이 중지?

답변

1

캔버스 주위에 테두리를 배치하고 클립 영역을 캔버스가 아닌 테두리에 연결하십시오.

2

다른 모든 렌더링 후에 ScaleTransform이 (다른 모든 변환과 마찬가지로) 적용됩니다. 즉, 먼저 cliprect가 적용된 다음 scale 변환이 적용됩니다. 해결책은 한 캔버스를이 캔버스 주위에 두어 한 단계 높은 클리핑을 수행하는 것입니다.

관련 문제