在Silverlight中为UIElement.Visibility添加动画

       Visibility可以控制UIElement的可见性,但其是一个枚举变量,msdn中说:“若要对作为枚举的值进行动画处理,必须使用 DiscreteObjectKeyFrame。”而关键帧动画没法做出平滑的过渡效果。
       可以利用Action来实现标题内容。
1、创建一个带opacity动画的Action。

using System.Windows;
using System.Windows.Interactivity;
using System.Windows.Media.Animation;
using System;

namespace SilverlightApp.Actions
{
    public class ToggleVisibilityAction : TargetedTriggerAction
    {
        protected override void Invoke(object parameter)
        {
            DoubleAnimation da = new DoubleAnimation();
            da.Duration = new System.Windows.Duration(TimeSpan.FromSeconds(0.3));
            Storyboard sb = new Storyboard();
            sb.Children.Add(da);
            Storyboard.SetTarget(da, this.Target);
            Storyboard.SetTargetProperty(da, new PropertyPath("Opacity"));
            
            if (this.Target.Visibility==Visibility.Visible)
            {
                da.To = 0;
                sb.Begin();
                sb.Completed += (o, e) => { this.Target.Visibility = Visibility.Collapsed; };
            } 
            else
            {
                this.Target.Visibility = Visibility.Visible;
                da.To = 1;
                sb.Begin();
            }
            
        }
    }
}

2、xaml中用之,替代visibility属性的设置。UIElement1是需要切换可见性的空间的x:Name。


       其中:
xmlns:i=”clr-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity”
xmlns:actions=”clr-namespace:SilverlightApp.Actions”

       ps:t60风扇罢工了:开机一声怒吼,停留在fan error。搜索了一下,据说是缺油了,等买的螺丝刀到了以后给它加加油,希望不用去找js修。这还不到3年,51nb上那么多用x31的,我以为thinkpad少说能用10年呢。。。

Leave a Comment

Your email address will not be published. Required fields are marked *