在wpf中更改可见性之前执行某些操作

时间:2014-11-14 15:03:43

标签: c# wpf animation fade

我想在可见性更改为折叠之前尝试制作动画。

当可见度发生变化时,我试图完成淡入/淡出效果。我没有淡入的问题,因为在我的动画之前可见性发生了变化(这很好)。

现在我的代码:

private void LoginOverlay_OnIsVisibleChanged(object sender, DependencyPropertyChangedEventArgs e)
{
    if (this.Visibility == Visibility.Visible)
    {
        //Fade in ... this is working
        Storyboard sb = new Storyboard();
        DoubleAnimation da = new DoubleAnimation();
        da.From = 0;
        da.To = 1;
        da.Duration = new Duration(TimeSpan.FromSeconds(1));
        sb.Children.Add(da);
        Storyboard.SetTargetProperty(da, new PropertyPath(OpacityProperty));
        Storyboard.SetTarget(da, this);
        sb.Begin();
    }
    else
    {
        //Fade out ... not working
        Storyboard sb = new Storyboard();
        DoubleAnimation da = new DoubleAnimation();
        da.From = 1;
        da.To = 0;
        da.Duration = new Duration(TimeSpan.FromSeconds(1));
        sb.Children.Add(da);
        Storyboard.SetTargetProperty(da, new PropertyPath(OpacityProperty));
        Storyboard.SetTarget(da, this);
        sb.Begin();
    }
}

1 个答案:

答案 0 :(得分:1)

在开始动画之前,控件的可见性已经变为“折叠”或“隐藏”,这意味着不透明度会有效,但是由于控件不可见,您无法看到它发生。

您拥有的一个选项是在开始动画之前将控件更改回可见,然后在故事板中添加关键帧动画,以便在1秒后(或淡入淡出动画的长度)将可见性设置回其预期值< / p>