Я создаю кнопку возврата (с именем BackGrid), которая должна появляться всякий раз, когда я помещаю курсор в сетку, и исчезает через 0,7 секунды, если курсор все еще не находится внутри сетки или кнопки назад.
Появляющаяся часть работает хорошо, но исчезающая часть, кажется, не работает.
Я сделал несколько незначительных ошибок и попробовал следующее:
- Удалил весь код Task.Factory и поместил
animateBackViewBox(false);
прямо под CursorInsideSubGrid = false
, просто чтобы проверить, нормально ли работает анимация. В результате он работает правильно.
- Моя забота перешла на код 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);
}