我正在尝试在 WPF 应用程序的初始屏幕上制作淡入淡出效果。
图像对象的 Opacity 最初为 0。此代码会将 Opacity 从 0(最小)修改为 1(最大),但 img_waves.Opacity 行不起作用。图像不透明度保持为 0。

private void Splash_ContentRendered(object sender, EventArgs e)
    {
        System.Threading.Thread.Sleep(3000);
        for (double x = 0; x<=1; x+=0.01d)
        {
            System.Threading.Thread.Sleep(15);
            //MessageBox.Show(x.ToString());
            img_waves.Opacity = x;
        }
        this.Close();
    }

但是,如果我激活“MessageBox.Show(x.ToString());”这一行
正如你在这张图片上看到的:

该代码有效,但我必须不断单击消息框。

我的问题是:为什么?为什么没有 MessageBox.Show 就不能工作?

最佳答案

虽然我同意@Luaan 的解释,为什么作为循环的替代解决方案,您可以在 Storyboard 属性上使用 DoubleAnimationOpacity

private void Splash_ContentRendered(object sender, EventArgs e)
{
    var sb = new Storyboard();
    var da = new DoubleAnimation(0, 1, new Duration(TimeSpan.FromSeconds(1.5)));
    da.BeginTime = TimeSpan.FromSeconds(3);
    Storyboard.SetTargetProperty(da, new PropertyPath("Opacity"));
    Storyboard.SetTarget(da, img_waves);
    sb.Children.Add(da);
    sb.Completed += (s1, e1) => this.Close();
    sb.Begin();
}

关于c# - 闪屏上的淡入淡出效果,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30103016/

10-15 06:28