我在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;
}
}
你这样做的方式不是最好 - 在UI线程很多OD工作。
我在我的应用程序下面的代码使用。 Remeber,Sroryboards动画合成器上的螺纹轻量且execly专为这一目的运行。
// 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开始动画形式1S。
您随时可以将此代码更改为XAML是更小,更explicite。
看看这个以前的答案 。 使用这个你可以做
Dispatcher.DelayInvoke(TimeSpan.FromSeconds(0.1), () =>
{
image3.Width = 0;
image4.Width = 0;
image5.Width = 0;
}