当前位置:  开发笔记 > Android > 正文

在WPF中,有人为Grid制作动画吗?

如何解决《在WPF中,有人为Grid制作动画吗?》经验,为你挑选了2个好方法。

我在Grid中有2列.当我单击一个按钮时,我希望第一列从它的当前位置动画到左边的位置为0.所以,实际上,它会折叠,我只剩下查看一列.



1> 小智..:

不应该太难.您需要创建一个EventTrigger,它具有一个以网格为目标的BeginStoryboard,并使用DoubleAnimation缩小列宽. 这里的示例具有类似的设置. EventTrigger将继续按钮,DoubleAnimation的StoryBoard.Target将指向您希望缩小的ColumnDefinition.

好的,这样做不太好.您无法直接缩小列,但可以将收缩列设置为填充(width ="*"),设置Grid的宽度和非收缩列,然后缩小整个网格.这确实有效.以下示例有效:


   
      
         
            
         
         
            
            
         
         
         
      

      
   



2> Aaron Hoffma..:

您需要创建GridLengthAnimation类(代码来自:http://windowsclient.net/learn/video.aspx?v = 70654 )

public class GridLengthAnimation : AnimationTimeline
{
    public GridLengthAnimation()
    {
        // no-op
    }

    public GridLength From
    {
        get { return (GridLength)GetValue(FromProperty); }
        set { SetValue(FromProperty, value); }
    }

    public static readonly DependencyProperty FromProperty =
      DependencyProperty.Register("From", typeof(GridLength), typeof(GridLengthAnimation));

    public GridLength To
    {
        get { return (GridLength)GetValue(ToProperty); }
        set { SetValue(ToProperty, value); }
    }

    public static readonly DependencyProperty ToProperty =
        DependencyProperty.Register("To", typeof(GridLength), typeof(GridLengthAnimation));

    public override Type TargetPropertyType
    {
        get { return typeof(GridLength); }
    }

    protected override Freezable CreateInstanceCore()
    {
        return new GridLengthAnimation();
    }

    public override object GetCurrentValue(object defaultOriginValue, object defaultDestinationValue, AnimationClock animationClock)
    {
        double fromValue = this.From.Value;
        double toValue = this.To.Value;

        if (fromValue > toValue)
        {
            return new GridLength((1 - animationClock.CurrentProgress.Value) * (fromValue - toValue) + toValue, this.To.IsStar ? GridUnitType.Star : GridUnitType.Pixel);
        }
        else
        {
            return new GridLength((animationClock.CurrentProgress.Value) * (toValue - fromValue) + fromValue, this.To.IsStar ? GridUnitType.Star : GridUnitType.Pixel);
        }
    }
}

还有RowDefinition/ColumnDefinition的故事板.


    
        
    




    
        
        
        
    

推荐阅读
Chloemw
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有