2009-09-08 15 views
1

J'ai un canevas auquel j'ai ajouté plusieurs milliers de polygones.Silverlight - Mise à l'échelle et découpage de polygones

Je voudrais pouvoir zoomer (que je fais via un ScaleTransform.

Cependant, j'ai essayé d'utiliser un Canvas.Clip et de tirer seulement une partie de la toile, mais dès que les valeurs de ScaleTransform sont modifiés, la coupure cesse de fonctionner ...

<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> 

Et dans mon codebehind,

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

que je fais quoi que ce soit évidemment faux?

Répondre

1

Placez une bordure autour de votre zone de dessin et attachez la zone de découpe à la bordure plutôt qu'à la zone de travail.

2

ScaleTransform (comme toutes les autres transformations) est appliqué APRÈS tous les autres rendus. Cela signifie que le cliprect est d'abord appliqué, puis la transformation d'échelle. Une solution serait de faire le découpage d'un niveau plus haut, en mettant une autre toile autour de celle-ci.