有没有一种方法可以显示WPF应用程序的启动屏幕?

有没有一种方法可以显示WPF应用程序的启动屏幕?,wpf,splash-screen,Wpf,Splash Screen,欺骗: 我想为我的WPF应用程序显示一个启动屏幕。 我想做的是在从文件加载字典时显示它(加载大约需要5-6秒)。有没有办法在WPF中实现这一点?我希望能有一些指导,因为这比我发布的其他问题要复杂一点。参见 或在VS2010中单击“代码>解决方案资源管理器 >代码>添加>新项目< /代码>,从已安装的模板列表中选择 WPF < /代码>,飞溅屏幕< /代码>应在列表的中间。 注意:启动屏幕在构造函数之后和主窗口window\u加载之前/时被删除。我把我所有的初始化都移到了主窗口的构造函数中,它非常

欺骗:

我想为我的WPF应用程序显示一个启动屏幕。 我想做的是在从文件加载字典时显示它(加载大约需要5-6秒)。有没有办法在WPF中实现这一点?我希望能有一些指导,因为这比我发布的其他问题要复杂一点。

参见

<>或在VS2010中单击“代码>解决方案资源管理器<代码> >代码>添加>新项目< /代码>,从已安装的模板列表中选择<代码> WPF < /代码>,<代码>飞溅屏幕< /代码>应在列表的中间。


注意:启动屏幕在构造函数之后和主窗口
window\u加载之前/时被删除。我把我所有的初始化都移到了主窗口的构造函数中,它非常有效,非常简单。

简短回答:添加->新项目->启动屏幕。它在项目中转储PNG-只需修改它。请注意,它支持完全alpha透明,因此可以包含阴影等。

SplashScreen实际上只是另一个没有边框的窗口,并且不能调整大小(您也不能以任何方式与它交互)。你可能想在任务栏上隐藏它,在屏幕上居中,等等。玩各种设置,直到你得到你想要的效果

这里有一个我在大约5分钟内快速提出的例子来证明这个理论:

<Window x:Class="MyWhateverApp.MySplashScreen"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        ShowInTaskbar="False" 
        ResizeMode="NoResize" 
        WindowStartupLocation="CenterScreen"
        WindowStyle="None" 
        Background="Transparent" 
        AllowsTransparency="True"
        Title="Sandbox Splash Screen" 
        SizeToContent="Width" 
        Topmost="True" 
        Height="{Binding RelativeSource={RelativeSource Self}, 
                         Path=ActualWidth}">

    <Border CornerRadius="8" Margin="15">
        <Border.Background>
            <ImageBrush ImageSource="Resources\sandtexture.jpeg" 
                        Stretch="Fill" />
        </Border.Background>
        <Border.Effect>
            <DropShadowEffect Color="#894F3B" 
                              BlurRadius="10" 
                              Opacity="0.75" 
                              ShadowDepth="15" />
        </Border.Effect>

        <TextBlock FontSize="40"
                   FontFamily="Bauhaus 93"
                   Foreground="White"
                   Margin="10"
                   VerticalAlignment="Center"
                   HorizontalAlignment="Center"
                   Text="WPF 3.5 Sandbox">
            <TextBlock.Effect>
                <DropShadowEffect Color="Black" />
            </TextBlock.Effect>
        </TextBlock>        
    </Border>
</Window>

我想我无法控制显示飞溅的时间(可能的默认时间是0.5秒或类似的时间)。我想实现的是在加载一些数据(5-6秒)时显示启动画面。启动画面在构造函数之后和主窗口加载回调时被移除。我将所有的初始化都移动到主窗口构造函数中,这非常有效,而且非常简单。奇怪的是,在一个5年前的答案上投票,没有任何解释。这对没有安装在VSI中的SplashScreen模板的人很有用,而这对某些场景很有用,SplashScreen的主要问题是它不支持动态内容(因为图像是在编译时绑定的)。如果您想在启动屏幕上显示进度条,甚至是应用程序版本,则必须创建一个标准WPF窗口。从积极的一面来看,使用这种方法创建的启动屏幕加载速度更快,因为它不需要框架来加载。@dotNET是的,这总是一种折衷。在过去,我创建了一个新的窗口句柄并直接执行绘制,这意味着我可以实现一个进度条,而不需要winforms/wpf来完成加载。非常快速和强大(可以是alpha、点击等),但是非常不灵活,因为您正在为每个要呈现的控件重新实现UI功能,并且必须高效地处理失效/透支。
<Application x:Class="MyWhateverApp.App"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             Startup="Application_Startup">
    <Application.Resources>

    </Application.Resources>
</Application>
Window1 mainWindow = null;

private void Application_Startup(object sender, StartupEventArgs e)
{
    MySplashScreen splash = new MySplashScreen();
    splash.Show();
    mainWindow = new Window1();
    mainWindow.Show();
    splash.Close();
}