Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/281.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在wpf中更改可见性之前,请执行某些操作_C#_Wpf_Animation_Fade - Fatal编程技术网

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

C# 在wpf中更改可见性之前,请执行某些操作,c#,wpf,animation,fade,C#,Wpf,Animation,Fade,我正在尝试在可见性变为塌陷之前制作动画 我试图在可见性改变时实现淡入/淡出效果。我对淡入没有问题,因为在我的动画之前可见性会发生变化(这很好) 这是我现在的代码: private void LoginOverlay_OnIsVisibleChanged(object sender, DependencyPropertyChangedEventArgs e) { if (this.Visibility == Visibility.Visible) { //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秒后将可见性设置回其预期值(或淡入淡出动画的长度)

当淡出动画开始时,控件将折叠/隐藏,因此您不会在屏幕上看到任何动画。与onVisibileChanged不同的是,如果您知道控件应在何时隐藏/折叠,则可以先运行动画,然后在情节提要的已完成事件上实际隐藏/折叠覆盖。尝试绑定可见性并在集合中执行此操作。您能解释如何执行此操作吗?我是动画新手,发现很难想出该做什么。一些示例代码会很有帮助。我也遇到过同样的问题,我尝试过这个解决方案。它不起作用,因为您正在修改visibility changed函数中的visibility属性,因此它以递归方式调用自己,而且永远不会结束。