Есть ли способ показать заставку для приложения WPF?

Dupe: Анимированный заставку WPF

Я хотел бы показать заставку для моего приложения WPF. то, что я хочу сделать, это показать его, пока я загружаю словарь из файла (загрузка занимает около 5-6 секунд). Есть ли способ достичь этого в WPF? Я был бы признателен за некоторый учебник, так как это немного сложнее, чем другие вопросы, которые я опубликовал.

Ответ 1

См. WPF 3.5 SP1: Заставка

Или в VS2010 нажмите Solution Explorer do Add -> New Item, выберите WPF из списка установленных шаблонов, а Splash Screen должен быть в нижней части списка посередине.

Примечание. Экран заставки удаляется после конструктора и перед/после обратного вызова главного окна Window_Loaded. Я переместил всю свою инициализацию в конструктор главного окна, и это работает, и это очень легко.

Ответ 2

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();
}

Ответ 3

Краткий ответ: Добавить → Новый элемент → Заставка. Он сбрасывает PNG в проекте - просто измените это. обратите внимание, что он поддерживает полную альфа-прозрачность, поэтому может содержать тени и т.д.