繁体   English   中英

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

[英]Opacity animation doesn't work after thread sleep (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);
    }

不久前,我在GUI和更新方面也遇到了麻烦。 就我而言,我有一个名为Loading的进度栏,上面带有标签,问题是,标签是GUI中的“孔”,我可以通过以下方法解决它:

Loading.Update();

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

链接到我提到的问题/答案: c#标签为“空” /是表格中的孔

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM