Windows phone 7 设置按钮大小的动画,然后恢复为空
我正在尝试创建一个动画,使它看起来像一个按钮翻转和背面显示。所以我想做的是: 1-显示背景色为x的按钮。(按钮现在的Windows phone 7 设置按钮大小的动画,然后恢复为空,windows-phone-7,xaml,animation,storyboard,Windows Phone 7,Xaml,Animation,Storyboard,我正在尝试创建一个动画,使它看起来像一个按钮翻转和背面显示。所以我想做的是: 1-显示背景色为x的按钮。(按钮现在的宽度为null,属性ActualWidth确实有一个值。) 2-创建将按钮宽度更改为零的双动画 DoubleAnimation widthAnimation = new DoubleAnimation(); widthAnimation.From = this.ActualWidth; widthAnimation.To = 0; widthAnimation.SpeedRatio
宽度为null
,属性ActualWidth
确实有一个值。)
2-创建将按钮宽度更改为零的双动画
DoubleAnimation widthAnimation = new DoubleAnimation();
widthAnimation.From = this.ActualWidth;
widthAnimation.To = 0;
widthAnimation.SpeedRatio = 3;
widthAnimation.Duration = TimeSpan.FromMilliseconds(800);
3-更改按钮的背景颜色
ColorAnimation colorAnimation = new ColorAnimation();
colorAnimation.From = State ? _xColor : _yColor;
colorAnimation.To = State ? _yColor : _xColor;
colorAnimation.BeginTime = TimeSpan.FromMilliseconds(400);
colorAnimation.Duration = TimeSpan.Zero;
4-将宽度更改回其原始值
widthAnimation.AutoReverse = true;
问题在于,当动画运行两次时,动画在设置动画时会读取this.ActualWidth
,这会导致动画无法达到原始宽度。我怎样才能解决这个问题?我想再次将宽度
设置为空
,但我觉得这是不可能的 您最好使用xaml样式和模板来“声明”您想要的内容,并让WPF/Silverlight来处理所有问题
如果您试图通过代码来做同样的事情,那么您可以做到,但是您需要知道框架在幕后做了什么
基本上你可以设置
-用于定义控件某些属性的值的样式
-DataTemplate定义控件内容的可视表示形式
-ControlTemplate来定义控件的外观
每个都可以有触发器
-属性触发器
设置属性或启动动作(如动画)的步骤
属性值更改或引发事件时
- 事件触发器和故事板
根据事件的发生启动一组操作
如果您想了解XAML样式和模板,
看看
花一天的时间学习,并节省许多小时(或几天)的尝试、错误和挫折
直截了当地说,在你的情况下,我认为你应该使用故事板。
看见
在这里,您还可以找到与XAML示例等价的代码我想到了将MaxWidth
作为目标,而不是实际的Width
。现在,我使用了一个KeyFrameCollection
,它在开始时将MaxWidth
设置为int.MaxValue(在使用自动翻转时在结束时也是如此)
它可以正常工作,直到出现分辨率大于最大int值的手机
守则:
DoubleAnimationUsingKeyFrames widthAnimation = new DoubleAnimationUsingKeyFrames();
widthAnimation.KeyFrames.Add(new DiscreteDoubleKeyFrame()
{
KeyTime = TimeSpan.Zero,
Value = int.MaxValue,
});
widthAnimation.KeyFrames.Add(new LinearDoubleKeyFrame()
{
KeyTime = TimeSpan.FromMilliseconds(1),
Value = ActualWidth,
});
widthAnimation.KeyFrames.Add(new LinearDoubleKeyFrame()
{
KeyTime = TimeSpan.FromMilliseconds(400),
Value = 0,
});
widthAnimation.Duration = TimeSpan.FromMilliseconds(400);
widthAnimation.AutoReverse = true;
您是否尝试过先将this.ActualWidth
存储在临时变量中?