DoubleAnimation不起作用

时间:2011-05-26 18:45:57

标签: wpf animation

//Create my grid and child controls

var layoutRoot = new System.Windows.Controls.Grid 
{
    Background = new SolidColorBrush(Colors.Blue),
    Name = "layaoutRoot1",
    Height = 400.0,
    VerticalAlignment  = System.Windows.VerticalAlignment.Stretch,
    HorizontalAlignment = System.Windows.HorizontalAlignment.Stretch
}; 

layoutRoot.ColumnDefinitions.Add(new ColumnDefinition()
{
    Width = new GridLength(1, GridUnitType.Auto)
});

layoutRoot.ColumnDefinitions.Add(new ColumnDefinition()
{
    Width = new GridLength(1, GridUnitType.Star)
});

var myImage = new Image
{
    Source = new BitmapImage(new Uri(@"C:\Path\to\Image\img.png")),
    Stretch = Stretch.UniformToFill,
    Margin = new Thickness(3),
    Width = 50.0,
    Height = 50.0,
};

var textBlocklbl = new TextBlock 
{ 
    Text = "Label Here",
    FontFamily = new FontFamily("Arial"),
    FontSize  = 14.0,
    FontWeight = FontWeights.Bold,
    Margin = new Thickness(3)
};

layoutRoot.Children.Add(myImage);
layoutRoot.Children.Add(textBlocklbl);

System.Windows.Controls.Grid.SetColumn(myImage, 0);
System.Windows.Controls.Grid.SetColumn(textBlocklbl, 1);

grid1.Children.Add(layoutRoot); //grid1 is placed on the MainWindow

Storyboard myStorboard = new Storyboard();
DoubleAnimation myDoubleAnimation = new DoubleAnimation();

myDoubleAnimation.From = 0.0;
myDoubleAnimation.To = 300.0;
myDoubleAnimation.Duration = new Duration(TimeSpan.FromSeconds(3));
myDoubleAnimation.RepeatBehavior = RepeatBehavior.Forever;
//myDoubleAnimation.AutoReverse = true;
myStorboard.Children.Add(myDoubleAnimation);
Storyboard.SetTargetName(myDoubleAnimation, layoutRoot.Name);
Storyboard.SetTargetProperty(myDoubleAnimation, new PropertyPath(System.Windows.Controls.Grid.HeightProperty));

myStorboard.Begin();

1 个答案:

答案 0 :(得分:4)

您的动画无法找到动画源。在将动画放入逻辑树之前,设置TargetName将不起作用。使用StoryBoard.SetTarget(layoutRoot)代替StoryBoard.SetTargetName(layoutRoot.Name)

以下是解决问题的方法:

1)首先你可以调试它。您只需在调试模式下在Visual Studio中启动代码并继续查看Output窗口,直到您看到错误为止。我相信你很快就会看到它 - 然后你可以解决它。您仍有可能看不到任何错误。

2)其次,您应该尝试再次调试它。拿你的代码,粘贴到干净的解决方案。仍然不起作用?大!继续删除与问题无关的部分代码。 VerticalAlighnmentHorizontalAlignment,你真的需要它们吗?如果没有这些属性,问题是否可以重现?删除它们。更少的代码 - 更容易调试。好的,最后你有10行代码,但它仍然不起作用。从MSDN中获取一个正常工作的样本,看起来尽可能接近您并找到差异。您甚至可以使用MSDN替换部分代码,以查看它是否有用。

3)好吧,它仍然不起作用,你没有找到任何样品,也没有办法调试它 - 你需要社区帮助。 正确提问。如果您是一名专业开发人员,那么您可能已经多次看到它 - 用户只有一个声明it doesn't work。您必须自己完全测试/调试/修复它。但那些是你的客户,他们最终会付钱给你。这是一个仅代表我们的利益驱动的自由社区。如果我们没有兴趣回答你的问题 - 我们永远不会回答它。所以问一个值得回答的问题。粘贴不起作用的代码是不够的。您还应提供有关不起作用的部件的信息。你有什么尝试自己解决它。如果我们认为您试图利用我们 - 我们将不会回答您的问题。

感谢您的时间。

更新好的,只是尝试调试它。正如我所说的那样。您的代码提供了无法找到layoutRoot的例外情况。确切的消息是:No applicable name scope exists to resolve the name 'layaoutRoot1'.。你只需要在VS中运行自己的代码,就像你说的那样。