线程睡眠后不透明动画不起作用(C#WPF)

时间:2018-09-07 10:30:51

标签: c# wpf

我正在创建一个后退按钮(名为BackGrid),当我将光标放在网格中时应该会出现,如果光标仍不在网格或后退按钮内,则在0.7秒后消失。

出现的部分很好用,但是消失的部分似乎不起作用。

我做了一些小的故障排除,并尝试了以下方法:

  1. 删除了整个Task.Factory代码,并将animateBackViewBox(false);放在CursorInsideSubGrid = false的正下方,以尝试查看动画是否独立运行良好。结果是它可以正常运行。
  2. 我的关注点转移到Task.Factory代码上,因为这是我第一次使用它,并且担心我没有正确实现它,因此我注释掉animateBackViewBox(false);并输入了MessageBox.Show("You left after .7 seconds"); 。结果是它也可以正常运行。

所以目前我很困惑真正的问题所在,因为它们两个都可以独立工作。

    private void ItemSubGrid_MouseEnter(object sender, MouseEventArgs e)
    {
        CursorInsideSubGrid = true;
        animateBackViewBox(true);
    }

    private void ItemSubGrid_MouseLeave(object sender, MouseEventArgs e)
    {
        CursorInsideSubGrid = false;

        Task.Factory.StartNew(() =>
        {
            System.Threading.Thread.Sleep(700);
            if(CursorInsideSubGrid == false)
            {
                animateBackViewBox(false);
            }
        });
    }

    void animateBackViewBox(bool show)
    {
        DoubleAnimation da = new DoubleAnimation();

        if (show == true)
        {
            BackGrid.IsHitTestVisible = true;
            da.From = BackGrid.Opacity;
            da.To = 100;
        }
        else
        {
            BackGrid.IsHitTestVisible = false;
            da.From = BackGrid.Opacity;
            da.To = 0;
        }

        da.AccelerationRatio = 1;
        da.Duration = new Duration(TimeSpan.FromMilliseconds(300));
        BackGrid.BeginAnimation(OpacityProperty,da);
    }

1 个答案:

答案 0 :(得分:-1)

前一段时间,我在GUI和更新方面也遇到了麻烦。就我而言,我有一个名为Loading的进度栏,上面带有标签,问题是,该标签是GUI中的“孔” 我可以通过

解决
Loading.Update();

我不知道它是否适合您,但值得一试

链接到我提到的问题/答案:c# Label is "empty"/is a hole in the form