2010-10-12 89 views
11

复制代码:WPF animated splash screen有没有办法显示WPF应用程序的启动画面?

我想为我的WPF应用程序显示启动画面。 我想要做的是显示它,而我从文件加载字典(大约需要5-6秒加载)。有没有办法在WPF中实现这一点?我会很感激一些教程,因为这比我发布的其他问题稍微复杂一些。

+0

可能重复[WPF动画闪屏(http://stackoverflow.com/questions/3677653/wpf-animated-splash-screen) – 2010-10-12 11:44:06

回答

12

WPF 3.5 SP1: Splash Screen

或者在Solution Explorer VS2010点击内完成Add -> New Item,从已安装的模板和Splash Screen列表中选择WPF应该放在中间的列表的底部。

注意:启动画面在构造函数和主窗口Window_Loaded回调之前/之后被移除。我将所有的初始化都移到了主窗口构造函数中,并且它很有用,而且非常简单。

+0

我想,我不能多长时间闪控制会显示(可能的默认时间是0.5秒,或类似的东西)。我想实现的是显示飞溅,而加载一些数据(5-6秒)。 – sokolovic 2010-10-12 11:59:26

+0

启动画面在构造函数和主窗口Window_Loaded回调之后被移除。我将所有的初始化都移到了主窗口构造函数中,并且它很有用,而且非常简单。 – 2010-10-12 17:10:00

+0

好的,它的工作原理。谢谢! :) – sokolovic 2010-10-13 14:50:38

7

简答题:添加 - >新建项目 - >启动画面。它在项目中转储了一个PNG - 只需修改它即可。请注意,它支持完整的alpha透明度,所以可以包含阴影等等。

+0

虽然这对于某些场景很有用,但SplashScreen的主要问题是它不支持动态内容(因为图像在编译时捆绑在一起)。如果您想在启动画面或应用程序版本上显示进度条,则必须创建一个标准的WPF窗口。从积极的方面来看,使用此方法创建的启动画面加载速度更快,因为它不需要加载框架。 – dotNET 2017-06-11 14:05:07

+0

@dotNET是的,它总是一个权衡。在过去,我创建了一个新的窗口句柄并直接执行绘画,这意味着我可以实现一个进度条而无需winforms/wpf来完成加载。非常快速且功能强大(可以是alpha,点击等),但却非常不灵活,因为您要为要渲染的每个控件重新实现UI功能,并且必须高效地处理失效/透支。 – Basic 2017-06-11 18:53:42

16

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> 

下一步,修改你的App.xaml文件删除启动窗口,而是提高Startup事件:

<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> 

而在代码隐藏中,以任何您认为最好的方式处理Application_Startup事件。例如:

Window1 mainWindow = null; 

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

奇怪的是,在一个5岁的答案中被拒绝投票,没有任何解释。 – 2015-09-09 13:30:21

+1

对于没有在VS中安装splashscreen模板的人有用 – TwinPrimesAreEz 2015-11-30 15:27:29

相关问题