2010-12-03 3 views
2

Je suis nouveau sur SL. Je viens d'écrire une application simple en dessinant un rectangle et une ligne. Lorsque je tente de positionner le rectangle, il n'a pas d'effet et il met toujours dans le coin inférieur droit.Impossible de positionner Rectangle dans Canvas dans Silverlight 4

Canvas.SetLeft(r, 100); 
Canvas.SetTop(r, 100); 

Lorsque je tente d'utiliser SetValue, les Les blocages d'applications (à savoir se coincer sur l'animation de chargement dans le navigateur):

r.SetValue(Canvas.LeftProperty, 10); 
r.SetValue(Canvas.TopProperty, 10); 

Est-ce que quelqu'un a éprouvé quelque chose comme ceci, et/ou sait comment le dépasser?

[EDIT] Voilà la source la plus complète:

public MainPage() 
    { 
     InitializeComponent(); 

     Rectangle r = new Rectangle() { 
      Stroke = new SolidColorBrush(Colors.Black), 
      Width = 100, 
      Height = 20, 
      Fill = new SolidColorBrush { Color = Color.FromArgb(80, 143, 12, 28) } 
     }; 
     //r.SetValue(Canvas.LeftProperty, 10); 
     //r.SetValue(Canvas.TopProperty, 10); 
     Canvas.SetLeft(r, 100); 
     Canvas.SetTop(r, 100); 
     this.LayoutRoot.Children.Add(r); 

     var line = new Line() { 
      Stroke = new SolidColorBrush(Colors.Black), 
      X1 = 10, Y1 = 10, X2 = 100, Y2 = 200 
     }; 
     LayoutRoot.Children.Add(line); 
    } 

J'ai essayé de mettre l'appel LayoutRoot..Add avant la SetValue/SetLeft mais il ne semble pas faire de différence.

+1

Je sais que cela peut sembler être une question idiote, mais est-ce que vos éléments dessinés sont réellement dans un élément de canevas, qui est lui-même dans le visuel de la racine? –

+1

Pas une question idiote, d'autant plus que j'ai dit que c'est ma première application SL :-) J'ai ajouté la source plus complète ci-dessus. – Greencpp

+0

Que se passe-t-il si vous n'essayez pas de positionner le rectangle? Que se passe-t-il si vous placez la définition du rectangle dans Xaml? – AnthonyWJones

Répondre

0

Essayez ceci:


     this.LayoutRoot.Children.Add(r); 
     Canvas.SetLeft(r, 100); 
     Canvas.SetTop(r, 100); 

Plutôt que:


     Canvas.SetLeft(r, 100); 
     Canvas.SetTop(r, 100); 
     this.LayoutRoot.Children.Add(r); 

Mise à jour: Il a été réparé depuis en XAML est par défaut une étiquette de grille comme LayoutRoot. Après l'avoir changé en balise canvas, il ne reste plus bloqué.

+0

Je l'ai fait, mais cela n'a pas fait de différence. La même chose avec quand j'ai utilisé SetValue; il a été bloqué lorsqu'il a été appelé avant et après l'appel LayoutRoot.Children.Add. – Greencpp

+1

LayoutRoot est un Canvas non? parce que par défaut c'est une grille. – basarat

+0

Ah !! C'était le problème. J'ai changé LayoutRoot en canvas1 et cela fonctionne. J'aurais dû remarquer que la ligne tirait de la toile. L'approche SetValue est toujours suspendue, bien que j'utilise SetLeft à la place. Merci! – Greencpp

Questions connexes