Canvas.GetTop () restituisce NaN

Ho una canvas con alcuni UIElements su. Dopo averli spostati sulla canvas animando le proprietà superiore e sinistra, ogni tanto una chiamata secondaria a Canvas.GetTop risulta in NaN.

Non sto ‘chiudendo’ le animazioni correttamente?

Ecco come sto facendo la mossa

private void InternalMove(double durationMS, FrameworkElement fElement, Point point, EventHandler callback) { _moveElement = fElement; _destination = point; Duration duration = new Duration(TimeSpan.FromMilliseconds(durationMS)); DoubleAnimation moveLeftAnimation = new DoubleAnimation(Canvas.GetLeft(fElement), point.X, duration, FillBehavior.Stop); Storyboard.SetTargetProperty(moveLeftAnimation, new PropertyPath("(Canvas.Left)")); DoubleAnimation moveTopAnimation = new DoubleAnimation(Canvas.GetTop(fElement), point.Y, duration, FillBehavior.Stop); Storyboard.SetTargetProperty(moveTopAnimation, new PropertyPath("(Canvas.Top)")); // Create a storyboard to contain the animation. _moveStoryboard = new Storyboard(); if (callback != null) _moveStoryboard.Completed += callback; _moveStoryboard.Completed += new EventHandler(s1_Completed); _moveStoryboard.Children.Add(moveLeftAnimation); _moveStoryboard.Children.Add(moveTopAnimation); _moveStoryboard.FillBehavior = FillBehavior.Stop; _moveStoryboard.Begin(fElement); } private void s1_Completed(object sender, EventArgs e) { if (_moveStoryboard != null) { _moveStoryboard.BeginAnimation(Canvas.LeftProperty, null, HandoffBehavior.Compose); _moveStoryboard.BeginAnimation(Canvas.TopProperty, null, HandoffBehavior.Compose); } Canvas.SetLeft(_moveElement, _destination.X); Canvas.SetTop(_moveElement, _destination.Y); } 

Grazie

Sembra che il consenso generale sia il Canvas.GetTop(x) restituisce ‘Nan’ se il valore non è impostato esplicitamente (anche se lo imposto esplicitamente, a volte ottengo il risultato).

È un metodo alternativo che sto usando ora

 Vector offset = VisualTreeHelper.GetOffset(fElement); 

che restituisce la posizione di fElement all’interno del contenitore.

Mi sono imbattuto in una situazione simile (NaN), ma in un contesto diverso. Come ricordo, aveva qualcosa a che fare con il modo in cui l’elemento era posizionato nel contenitore.

Spiacente, non ho potuto fornire altro aiuto, ma forse questo fornirà una guida.