Есть ли способ показать заставку для приложения WPF? - PullRequest
13 голосов
/ 12 октября 2010

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

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

Ответы [ 3 ]

18 голосов
/ 12 октября 2010

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, чтобы удалить окно запуска, и вместо этого вызовите событие запуска:

<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();
}
12 голосов
/ 12 октября 2010

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

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

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

7 голосов
/ 12 октября 2010

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

...