Csharp/C#教程:Canvas.GetTop()返回NaN分享


Canvas.GetTop()返回NaN

我有一个带有一些UIElements的Canvas。 通过动画顶部和左侧属性将我们在canvas上移动后,偶尔会调用Canvas.GetTop,导致NaN。

我没有正确地“关闭”动画吗?

这是我如何做的举动

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); } 

谢谢

似乎普遍的共识是Canvas.GetTop(x)如果没有明确设置值,则返回’Nan’(即使我明确设置它,我仍然有时得到那个结果)。

我现在使用的另一种方法是

 Vector offset = VisualTreeHelper.GetOffset(fElement); 

它返回fElement在其容器中的位置。

我遇到了类似的情况(NaN),但是在不同的背景下。 我记得,它与元素在容器中的位置有关。

抱歉,我无法提供更多帮助,但也许这会提供一些指导。

上述就是C#学习教程:Canvas.GetTop()返回NaN分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/cdevelopment/1013875.html

(0)
上一篇 2021年12月31日
下一篇 2021年12月31日

精彩推荐