2009-07-09 12 views
3

Je reçois un code à partir de mon code, je ne peux pas identifier le problème/bug. voici mon code ... bitImpossible de définir une propriété sur l'objet 'Identity' car il est en lecture seule

private void DoArrange() 
    { 
     Point center = new Point((this.Width - ItemSize)/2, (this.Height - ItemSize)/2); 
     double radiusX = center.X; 
     double radiusY = center.Y; 
     double scale = ScalePerspective; 

     for (int i = 0; i < Children.Count; i++) 
     { 
      UIElement item = Children[i]; 
      double radians = (double)item.GetValue(CarouselPanel.AngleProperty); 

      Point p = new Point(
           (Math.Cos(radians) * radiusX) + center.X, 
           (Math.Sin(radians) * radiusY) + center.Y 
           ); 

      if (item.RenderTransform == null) 
      { 
       item.RenderTransform = new MatrixTransform(); 
       item.RenderTransformOrigin = new Point(0.5, 0.5); 
      } 
      MatrixTransform mt = item.RenderTransform as MatrixTransform; 
      double scaleMinusRounding = p.Y/(center.Y + radiusY); 
      double scaleX = Math.Min(scaleMinusRounding + scale, 1.0); 
      double scaleY = Math.Min(scaleMinusRounding + scale, 1.0); 
      Matrix mx = new Matrix(scaleX, 0.0, 0.0, scaleY, 0.0, 0.0); 

      *** mt.Matrix = mx; *** 

      item.RenderTransform = mt; 

      int zIndex = (int)((p.Y/base.Height) * 50); 
      item.SetValue(Canvas.ZIndexProperty, zIndex); 
      Rect r = new Rect(p.X, p.Y, ItemSize, ItemSize); 
      item.Arrange(r); 
     } 
    } 

Je modifie le message à nouveau, .. l'erreur soulevée du *** mt.Matrix = mx; *** déclaration ..

Quel pourrait être le problème que j'utilise une application WPF (win).

+0

Quelle est l'erreur? – AlbertoPL

Répondre

5

Au lieu d'attribuer à la propriété en lecture seule matrice, essayez ceci:

item.RenderTransform = new MatrixTransform(mx); 
+0

J'ai eu un problème avec le zoom de l'image à la souris et j'ai passé beaucoup de temps à chercher. Avec d'autres solutions, j'ai trouvé que ça faisait l'affaire dans 4 lignes de code! Merci! – EpiGen

1

La propriété RenderTransform de UIElement est d'abord désigné comme une instance MatrixTransform dont les propriétés IsSealed et IsFrozen sont vraies, au lieu d'un nul référence. Cela devrait être remarqué.

Questions connexes