[英]Opacity animation doesn't work after thread sleep (c# wpf)
我正在创建一个后退按钮(名为BackGrid),当我将光标放在网格中时应该会出现,如果光标仍不在网格或后退按钮内,则在0.7秒后消失。
出现的部分效果很好,但是消失的部分似乎不起作用。
我做了一些小的故障排除,并尝试了以下方法:
animateBackViewBox(false);
在CursorInsideSubGrid = false
正下方,只是尝试查看动画是否独立运行良好。 结果是它可以正确运行。 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.