gpt4 book ai didi

c# - Canvas.GetTop() 返回 NaN

转载 作者:太空狗 更新时间:2023-10-29 17:39:53 28 4
gpt4 key购买 nike

我有一个带有一些 UIElement 的 Canvas 。在我通过设置 top 和 left 属性的动画将它们移动到 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 在其容器中的位置。

关于c# - Canvas.GetTop() 返回 NaN,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/669071/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com