2011-12-23 66 views
0

为什么这个动画导致窗口在原始位置从左到右移动,然后跳到另一个位置,即使我在动画开始之前设置了宽度和高度属性。它似乎在重新开始显示宽度时重置高度值,然后在执行第二次动画时将其更改回来。为什么WPF动画不尊重高度或宽度值?

Sub ShowTitle(ByVal Text As String) 
     tb_text.Visibility = Windows.Visibility.Hidden 
     tb_text.Height = 5 
     tb_text.Width = 0 
     tb_text.Text = Text 
     tb_text.Visibility = Windows.Visibility.Visible 


     Dim SB As New Animation.Storyboard 

     Dim FIW = New Animation.DoubleAnimation(0, 400, New Duration(TimeSpan.FromSeconds(2))) 
     SB.Children.Add(FIW) 
     Animation.Storyboard.SetTargetName(FIW, tb_text.Name) 
     Animation.Storyboard.SetTargetProperty(FIW, New PropertyPath(WidthProperty)) 

     Dim FIH = New Animation.DoubleAnimation(5.0, 50.0, New Duration(TimeSpan.FromSeconds(2))) 
     FIH.BeginTime = TimeSpan.FromSeconds(2) 
     SB.Children.Add(FIH) 
     Animation.Storyboard.SetTargetName(FIH, tb_text.Name) 
     Animation.Storyboard.SetTargetProperty(FIH, New PropertyPath(HeightProperty)) 

     SB.Begin(Me) 
    End Sub 
+0

你预计会发生什么?代码正在“完全”执行你所要做的事情。每次调用ShowTitle()时,它将使高度为5,宽度为0,然后根据优先级动画,即从0到400的宽度动画,然后是从5到50的高度动画。 – 2011-12-23 09:18:48

+0

虽然不是这样,它无法将高度值重置为5,只会改变宽度。然后当这个完成时,下一个动画效果是它的工作,但它不应该以50的宽度开始,它应该有5的宽度。结果是它似乎是重置自己而不是平滑过渡。 – Middletone 2011-12-23 14:26:11

回答

1

不知道这是否与您的情况有关,但我只花了4小时跟踪宽度/高度(在我的情况下,主窗口)的错误。在我竭尽全力去抓任何事情的过程中,我终于在这篇文章中磕磕绊绊。最后,对于我来说,“修补程序”竟然将项目切换回使用.NET Framework 3.5。如果你有这种奢侈品,试试看看行为是否改变。

虽然你和我都有动画和宽度/高度问题,但我发现另一个人在MS connect上报告了宽度/高度不工作的属性和触发器(仅限.NET Framework 4.0)。我建立了一个非常小的测试项目来说明问题并提交了我自己的错误报告,但自从其他人在20个月前发布了他的问题后,我并没有真正屏住呼吸,从那以后他的问题就一直在“分流和解决”。

+0

我有这个相同的问题。非同时的宽度和高度动画,当我回到Framework 3.5时,它可以正常工作。这不是一个更大的交易? – windowskm 2012-09-03 13:40:53