Анимация непрозрачности не работает после сна потока (c # wpf) - PullRequest
0 голосов
/ 07 сентября 2018

Я создаю кнопку возврата (с именем 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 голосов
/ 07 сентября 2018

Некоторое время назад у меня также были проблемы с графическим интерфейсом и обновлением. В моем случае, у меня был индикатор загрузки с названием «Загрузка» с надписью на нем, проблема заключалась в том, что ярлык был «дырой» в GUI. Я мог бы решить это

Loading.Update();

Я не знаю, подходит ли он вам, но стоит попробовать

Ссылка на мой упомянутый вопрос / ответ: c # Ярлык "пуст" / это отверстие в форме

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...