动画边框控件的宽度
问题描述:
我试图在Windows 8 Metro应用程序中为Border控件的宽度设置动画效果。我已经成功地在动画边境其他属性,如不透明度:动画边框控件的宽度
private void Item_Tapped(object sender, RoutedEventArgs e)
{
var border = sender as Border;
var animation = new DoubleAnimation();
animation.To = 0.0;
animation.Duration = new Duration(TimeSpan.FromSeconds(1));
var storyboard = new Storyboard();
storyboard.Children.Add(animation);
Storyboard.SetTarget(animation, border);
Storyboard.SetTargetProperty(animation, "Opacity");
storyboard.Begin();
}
但是,当我尝试动画控件的宽度:
private void Item_Tapped(object sender, RoutedEventArgs e)
{
var border = sender as Border;
var animation = new DoubleAnimation();
animation.To = 600.0;
animation.Duration = new Duration(TimeSpan.FromSeconds(1));
var storyboard = new Storyboard();
storyboard.Children.Add(animation);
Storyboard.SetTarget(animation, border);
Storyboard.SetTargetProperty(animation, "Width");
storyboard.Begin();
}
什么也没有发生。
我能够在WPF中做到这一点,但不是在Windows 8中。这是Metro的限制或错误,还是我做错了什么?
谢谢
答
我不确定你在WPF中是如何工作的。根据http://msdn.microsoft.com/en-us/library/system.windows.media.animation.storyboard.targetproperty,目标属性必须是依赖项属性。根据http://msdn.microsoft.com/en-us/library/system.windows.controls.border,宽度不是依赖属性。
答
我能够使它发挥作用启用EnableDependentAnimation
public static async Task Width(FrameworkElement obj, double doubleValue, int milliseconds)
{
var animation= new DoubleAnimation
{
To = doubleValue,
Duration = TimeSpan.FromMilliseconds(milliseconds),
EnableDependentAnimation = true// <== here
};
Storyboard.SetTarget(animation, obj);
Storyboard.SetTargetProperty(animation, "Width");
var sb = new Storyboard();
sb.Children.Add(animation);
await sb.BeginAsync();
}
享受!
我可以为WPF和SL中的Width属性设置动画,证明[here](http://www.silverlight.net/learn/creating-ui/animation-and-easing/animations-(silverlight-quickstart) #advanced_animations)。 不幸的是,这种技术在WinRT中看起来不起作用,所以你可能是正确的,宽度不是“有生命力的”。 谢谢 – 2012-08-06 19:08:37
@phoog:你指向的文档实际上是说Width实际上是一个继承自FrameworkElement的DependencyProperty,所以这绝对不是该属性无法动画的原因。 http://msdn.microsoft.com/en-us/library/system.windows.frameworkelement.width – Murven 2013-07-25 03:00:39
与Line.X1/Line.X2等相同的问题。(Windows.UI.Xaml.Shapes),在WPF中工作,不能在8.1下制作。 – 2014-02-01 01:06:33