Próbuję użyć .NET 4 SplashScreen w aplikacji WPF opartej na Prism. Użyłem SpashScreen, ustawiając akcję budowania na obrazie na SplashScreen.Jak korzystać z .NET 4 SplashScreen w aplikacji opartej na pryzmie WPF?
Aplikacja używana do awaryjnego zawieszania się z System.Resources.MissingManifestResourceException
. W końcu doszedłem do wniosku, że jeśli dodaję plik StartupUri = "MainWindow.xaml" do pliku App.Xaml, SplashScreen będzie działał poprawnie.
<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>
Ale w aplikacji na pryzmat nie możemy mieć StartupUri. Wszystko odbywa się w Bootstrapper.
Co muszę zrobić ręcznie, aby program StartupUri działał w trybie SplashScreen?
Aktualizacja 1: Pełną wiadomość Wyjątkiem jest:
System.Resources.MissingManifestResourceException był nieobsługiwany
Message = Nie można odnaleźć żadnych zasobów odpowiednich dla określonej kultury lub kultury neutralnej. Upewnij się, że "Application.g.resources" zostało poprawnie osadzone lub połączone w zestawie "Aplikacja" podczas kompilacji lub że wszystkie wymagane zestawy satelitów są ładowalne i w pełni podpisane.
Aktualizacja 2: I zorientowali się, dodanie lub usunięcie StartupUri nie ma znaczenia. Liczy się to, że mam dodatkowe okno WPF (inne niż App.xaml) lub 2 fałszywe wpisy w znaczniku App.Resources.
<Application.Resources>
<Style x:Key="Dummy"/>
<Style x:Key="Dummy1"/>
</Application.Resources>
Jeśli tego nie zrobi, to plik Application.g.resources nie jest tworzony w obj pliku, a tym samym nie są osadzone w pliku wykonywalnego. Dodałem dwa fałszywe wpisy zasobów, które zostały mi przedstawione przez to blog post.
Update 3:
Moje pytanie odpowiedział Bob Bao na MSDN forum here. Wygląda na to, że Kent próbował skierować mnie w tym samym kierunku.
Nie ustawiaj akcji budowania obrazu na SplashScreen. Zamiast:
Dodaj kod w metodzie App OnStartup jak:
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" to jeden obraz w projekcie, a jego "Budowa Action" jest "Zasób".
Czy istnieje pytanie gdzieś tutaj? – DeCaf
@DeCaf Mam zaktualizowane pytanie. –