带有GIF动画的初始屏幕在WPF C#中不是动画

Splash Screen with Animated GIF is not animating in WPF C#(带有GIF动画的初始屏幕在WPF C#中不是动画)
本文介绍了带有GIF动画的初始屏幕在WPF C#中不是动画的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

情况是这样的。我当前正在开发一个C#WPF桌面应用程序,我想在启动该程序时添加一个闪屏。

但我没有使用SplashScreen类。我在同名应用程序的基础上使用了一个额外的WPF窗口类,我称这个类为Splashy。

我的初始屏幕有一个GIF动画图像,当在下面Splashy类的WebBrowser控件上设置动画时,该图像效果很好...

<Image gif:ImageBehavior.AnimatedSource="Images/FSIntro.gif" Margin="10,1,0,10">
    <Image.OpacityMask>
        <ImageBrush ImageSource="Images/FSIntro.gif"/>
    </Image.OpacityMask>
</Image>

...并且Splashy类本身在App.XAML中被初始化为下面的StartupUri。

<Application
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
         ...  ...
         ... (some text) ...
         ...  ...
         StartupUri="Splashy.xaml">
<Application.Resources>

但该方案的问题是闪屏仅挂起,并且不会进入主程序本身。

所以我尝试了一种不同的方法。一个使用代码。

当我将以下代码实现到闪屏,然后将其实现到我的程序以运行闪屏,然后显示主屏幕时,闪屏执行了我想要做的事情但它没有像我想要的那样动画

下面是醒目的类代码

public partial class Splashy : Window
{
    public Intro()
    {
        InitializeComponent();
    }

    public void Outro()
    {
        this.Close();
    }
}

和下面是实现plashScreen的程序方法。

public partial class LoginScreen : Window
{
    Splashy splash = new Splashy();

    public LoginScreen()
    {

        splash.Show();
        Thread.Sleep(5000);
        splash.Outro();

        // home screen 
    }
}

如有任何提示和帮助,我们将不胜感激。

推荐答案

我会尝试这样做。创建处理所有这些逻辑的Bootstrapper类。

public class BootStrapper
{
    SplashScreen Splash = new SplashScreen();
    MainWindow MainWindow = new MainWindow();

    public void Start()
    {
        var timer = new DispatcherTimer();
        timer.Interval = TimeSpan.FromSeconds(2);
        timer.Tick += (s, e) =>
        {
            Splash.Close();
            MainWindow.Show();
            timer.Stop();
        };

        timer.Start();
        Splash.Show();
    }
}

App.xaml中删除StartupUri,这样就不会先创建您的MainWindow

<Application x:Class="StackOverflow.App"
         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
         xmlns:local="clr-namespace:StackOverflow"
         StartupUri="MainWindow.xaml">

变成...

<Application x:Class="StackOverflow.App"
         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
         xmlns:local="clr-namespace:StackOverflow">

然后,在App.xaml.cs中,覆盖启动,以便它创建Bootstrapper类的新实例。

public partial class App : Application
{
    protected override void OnStartup(StartupEventArgs e)
    {
        var bootStrapper = new BootStrapper();
        bootStrapper.Start();
        base.OnStartup(e);
    }
}

这篇关于带有GIF动画的初始屏幕在WPF C#中不是动画的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!

本站部分内容来源互联网,如果有图片或者内容侵犯您的权益请联系我们删除!

相关文档推荐

DispatcherQueue null when trying to update Ui property in ViewModel(尝试更新ViewModel中的Ui属性时DispatcherQueue为空)
Drawing over all windows on multiple monitors(在多个监视器上绘制所有窗口)
Programmatically show the desktop(以编程方式显示桌面)
c# Generic Setlt;Tgt; implementation to access objects by type(按类型访问对象的C#泛型集实现)
InvalidOperationException When using Context Injection in ASP.Net Core(在ASP.NET核心中使用上下文注入时发生InvalidOperationException)
LINQ many-to-many relationship, how to write a correct WHERE clause?(LINQ多对多关系,如何写一个正确的WHERE子句?)