Как использовать .NET 4 SplashScreen в приложении на основе WPF Prism? - PullRequest
5 голосов
/ 16 октября 2011

Я пытаюсь использовать .NET 4 SplashScreen в WPF-приложении на основе Prism. Я использовал SpashScreen, установив действие сборки на образ SplashScreen.

Приложение, которое продолжало аварийно завершать работу с System.Resources.MissingManifestResourceException. Наконец, я понял, что если я добавлю StartupUri = "MainWindow.xaml" в файл App.Xaml, SplashScreen работает нормально.

 <Application x:Class="Application"
       xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
       xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
       StartupUri="MainWindow.xaml">
 </Application>

Но в приложении призмы у нас не может быть StartupUri. Все сделано в Bootstrapper.

Итак, что мне нужно сделать вручную, что StartupUri сделал, чтобы заставить работать SplashScreen?

Обновление 1: Полное сообщение об исключении:

System.Resources.MissingManifestResourceException не обработано

Сообщение = Не удалось найти ресурсы, подходящие для указанной культуры или нейтральной культуры. Удостовериться "Application.g.resources" был правильно встроен или связан с сборка "Приложение" во время компиляции, или это все спутник требуемые сборки могут быть загружены и полностью подписаны.

Обновление 2: Я понял, добавление или удаление StartupUri не имеет значения. Важно то, что у меня есть дополнительное окно WPF (кроме App.xaml) или 2 фиктивные записи в теге App.Resources.

<Application.Resources>
   <Style x:Key="Dummy"/>
   <Style x:Key="Dummy1"/>
</Application.Resources>

Если я этого не сделаю, файл Application.g.resources не будет создан в файле obj и, следовательно, не будет встроен в исполняемый файл. Добавление двух фиктивных записей о ресурсах привлекло мое внимание к этому сообщению в блоге .

Обновление 3:

На мой вопрос ответил Боб Бао на форуме MSDN здесь . Также кажется, что Кент пытался указать мне в том же направлении.

Не устанавливайте действие сборки изображения на SplashScreen. Вместо этого:

Добавьте код в метод App OnStartup следующим образом:

protected override void OnStartup(StartupEventArgs e)
{
  SplashScreen splashScreen = new SplashScreen("splashscreen.png");
  splashScreen.Show(true);

  base.OnStartup(e);
  Bootstrapper bootstrapper = new Bootstrapper();
  bootstrapper.Run();
}

"splashscreen.png" - это одно изображение в проекте, и его " Build Action " это " Ресурс ".

Ответы [ 2 ]

1 голос
/ 17 октября 2011

Просто определите вашу собственную точку входа, которая сначала показывает заставку, а затем загружает Prism.В свойствах вашего проекта установите точку входа на свою собственную точку входа.

internal static class Entry
{
    public static void Main(string[] args)
    {
        var splashScreen = ...;
        splashScreen.Show();

        var bootstrapper = ...;
        bootstrapper....;
    }
}
0 голосов
/ 16 августа 2013

Пожалуйста, проверьте этот адрес: http://prismsplashscreen.codeplex.com/ Вот полный пример с призмой

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...