Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/295.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/14.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 - Fatal编程技术网

不透明度动画不';线程休眠后不工作(c#wpf)

不透明度动画不';线程休眠后不工作(c#wpf),c#,wpf,C#,Wpf,我正在创建一个后退按钮(名为BackGrid),当我将光标放在网格内时,该按钮会出现,如果光标仍然不在网格内或后退按钮,则会在.7秒后消失 出现的部分很好,但消失的部分似乎不起作用 我进行了一些小故障排除,并尝试了以下操作: 删除整个任务。工厂代码并放置animateBackViewBox(false)位于CursorInsideSubGrid=false的正下方,尝试查看动画是否独立运行良好。结果是它运行正常 我的担心转移到了任务上。工厂代码,因为这是我第一次使用它,并且担心我没有正确地实现它

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

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

我进行了一些小故障排除,并尝试了以下操作:

  • 删除整个任务。工厂代码并放置
    animateBackViewBox(false)
    位于
    CursorInsideSubGrid=false
    的正下方,尝试查看动画是否独立运行良好。结果是它运行正常
  • 我的担心转移到了任务上。工厂代码,因为这是我第一次使用它,并且担心我没有正确地实现它,所以我注释掉了
    animateBackViewBox(false)
    并输入
    MessageBox.Show(“您在0.7秒后离开”)取而代之。结果是它也能正确运行
  • 所以,现在我被真正的问题难住了,因为它们都可以独立工作

        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();
    
    我不知道它是否适合你,但值得一试


    链接到我提到的问题/答案:

    加载在WPF上使用什么名称空间?Intellisense似乎无法推荐。请正确阅读我的描述;我有一个名为LOADING的PROGRESSBAR,我用UPDATE调用它(WPF等价物是
    .UpdateLayout
    )。我复制了你的代码,它对我很有用,请不要因为你不理解就投反对票。除此之外,我没有投反对票,实际上我正在全神贯注地阅读你提供的链接,因为我发现它很有用。为了证明这一点,我会投你的反对票,30分钟后收回。因为我没有声誉,所以它甚至没有让我投反对票,所以这应该是足够的证据。我的缺点是,有太多人直接给我答案,伙计们^^我用了一个调度计时器,它成功了()。