Ожидание 0,1 секунды до скрытия изображения - PullRequest
1 голос
/ 09 апреля 2011

Я делаю небольшую программу на C # для Windows Phone. Одна вещь, которую он должен сделать, это скрыть панель инструментов кнопок всякий раз, когда пользователь нажимает кнопку «Скрыть».

Я закончил код, чтобы скрыть панель инструментов. Он скрывает кнопки, как и ожидалось. Но сейчас происходит то, что все кнопки исчезают одновременно. Чтобы сделать что-то вроде «анимации», я решил подождать 0,1 секунды, пока не спрятал все кнопки.

Как бы я подождал 0,1 секунды?

Вот мой код прямо сейчас.

    bool panelopened = false;

    private void image1_MouseEnter(object sender, MouseEventArgs e)
    {
        if (panelopened == false)
        {
            ImageSourceConverter imgs = new ImageSourceConverter();
            image1.SetValue(Image.SourceProperty, imgs.ConvertFromString("/Main%20View;component/Images/hide.png"));
            image3.Width = 50;
            image4.Width = 50;
            image5.Width = 50;
            panelopened = true;
        }
        else
        {
            ImageSourceConverter imgs = new ImageSourceConverter();
            image1.SetValue(Image.SourceProperty, imgs.ConvertFromString("/Main%20View;component/Images/more.png"));
            image3.Width = 0;
            image4.Width = 0;
            image5.Width = 0;
            panelopened = false;
        }
    } 

Ответы [ 2 ]

5 голосов
/ 09 апреля 2011

Проверьте это предыдущий ответ .Используя это вы можете сделать

Dispatcher.DelayInvoke(TimeSpan.FromSeconds(0.1), () => 
{
   image3.Width = 0;
   image4.Width = 0;
   image5.Width = 0;
}
1 голос
/ 09 апреля 2011

То, как вы это делаете, не самое лучшее - много работы в потоке пользовательского интерфейса.

Я использую в своем приложении следующий код. Помните, анимации Sroryboards запускаются в потоке Compositor, который легок и построен специально для этой цели.

// fade animation of the Popup to opacity 1.0
    private void ShowPopup()
    {
        exitPopup.Visibility = Visibility.Visible;
        Storyboard storyboard = new Storyboard();
        DoubleAnimation fadeAnimation = new DoubleAnimation();
        fadeAnimation.To = 1;
        fadeAnimation.Duration = TimeSpan.FromSeconds(1);
        //fadeAnimation.FillBehavior = FillBehavior.Stop;
        StoryBoardHelper.SetTarget(fadeAnimation, exitPopup);
        Storyboard.SetTargetProperty(fadeAnimation, new PropertyPath("(Canvas.Opacity)"));
        storyboard.Children.Add(fadeAnimation);
        storyboard.Duration = fadeAnimation.Duration;
        storyboard.Begin();
    }

    // fade aninmation to opacity 0.0
    private void ClosePopup()
    {
        Storyboard storyboard = new Storyboard();
        DoubleAnimation fadeAnimation = new DoubleAnimation();
        fadeAnimation.To = 0;
        fadeAnimation.Duration = TimeSpan.FromSeconds(0.2);
        //fadeAnimation.FillBehavior = FillBehavior.Stop;
        StoryBoardHelper.SetTarget(fadeAnimation, exitPopup);
        Storyboard.SetTargetProperty(fadeAnimation, new PropertyPath("(Canvas.Opacity)"));
        storyboard.Children.Add(fadeAnimation);
        storyboard.Duration = fadeAnimation.Duration;
        storyboard.Begin();
        storyboard.Completed += (sender, e) => exitPopup.Visibility = Visibility.Collapsed;
    }

Тебе нужна еще одна вещь. Установите BeginTime для запуска анимационной формы 1с.

Вы всегда можете изменить этот код на XAML, который меньше и более точный.

...