【问题标题】:Do something before the visibilty is changed in wpf在 wpf 中更改可见性之前做一些事情
【发布时间】:2014-11-14 15:03:43
【问题描述】:

我正在尝试在可见性变为折叠之前制作动画。

我正在尝试在可见性更改时实现淡入/淡出效果。我对淡入没有问题,因为在我的动画之前可见性会发生变化(这很好)。

这是我现在的代码:

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();
    }
}

【问题讨论】:

  • 当您的淡出动画开始时,控件将折叠/隐藏,因此您在屏幕上看不到任何动画。如果您知道何时应该隐藏/折叠控件,而不是 onVisibileChanged,则可以先运行动画,然后在情节提要的已完成事件上,您实际上可以隐藏/折叠叠加层。
  • 尝试绑定可见性并在集合中进行。

标签: c# wpf animation fade


【解决方案1】:

在您开始动画之前,控件的可见性已经更改为折叠或隐藏,这意味着不透明度将进行动画处理,但您将无法看到它发生,因为控件是不可见的。

您有一个选择是在开始动画之前将控件更改回可见,然后将关键帧动画添加到情节提要以在 1 秒后将可见性设置回其预期值(或淡入淡出动画的长度)

【讨论】:

  • 你能解释一下怎么做吗?我是动画新手,发现很难弄清楚该做什么。一些示例代码会很有帮助。
  • 我遇到了同样的问题,我已经尝试过这个解决方案。它不起作用,因为您正在修改可见性更改函数中的可见性属性,因此它以递归方式调用自身并且永远不会结束。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-17
  • 1970-01-01
相关资源
最近更新 更多