2011-10-16 20 views
5

Tôi đang cố gắng sử dụng .NET 4 SplashScreen trong ứng dụng WPF dựa trên Prism. Tôi đã sử dụng SpashScreen bằng cách thiết lập hành động xây dựng trên hình ảnh tới SplashScreen.Cách sử dụng .NET 4 SplashScreen trong ứng dụng dựa trên lăng kính WPF?

Ứng dụng được sử dụng để tiếp tục gặp sự cố với số System.Resources.MissingManifestResourceException. Cuối cùng tôi đã tìm ra rằng nếu tôi thêm một StartupUri = "MainWindow.xaml" trong tệp App.Xaml, thì SplashScreen hoạt động tốt.

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

Nhưng trong ứng dụng lăng kính, chúng tôi không thể có StartupUri. Mọi thứ được thực hiện trong Bootstrapper.

Vì vậy, tôi cần phải làm gì theo cách thủ công mà StartupUri đã làm để làm cho SplashScreen hoạt động?

Cập nhật 1: Thông điệp ngoại lệ hoàn thành là:

System.Resources.MissingManifestResourceException là unhandled

nhắn = Không thể tìm thấy bất kỳ nguồn lực phù hợp với văn hóa quy định hoặc văn hóa trung tính. Đảm bảo rằng "Application.g.resources" đã được nhúng hoặc liên kết chính xác vào lắp ráp "Ứng dụng" tại thời gian biên dịch hoặc tất cả các cụm vệ tinh được yêu cầu đều có thể tải và được ký đầy đủ.

Cập nhật 2: Tôi đã tìm ra cách thêm hoặc loại bỏ các StartupUri không quan trọng. Điều quan trọng là tôi có một cửa sổ WPF bổ sung (ngoài App.xaml) hoặc 2 mục nhập giả trong thẻ App.Resources.

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

Nếu tôi không làm điều này, tệp Application.g.resources không được tạo trong tệp obj và do đó không được nhúng trong tệp thi hành. Thêm hai mục nhập tài nguyên giả đã được tôi chú ý bởi điều này blog post.

Cập nhật 3:

Câu hỏi của tôi đã được trả lời bởi Bob Bảo trên MSDN diễn đàn here. Có vẻ như Kent đang cố chỉ cho tôi theo cùng một hướng.

Không đặt hành động xây dựng của hình ảnh thành SplashScreen. Thay vào đó:

Thêm mã trong phương pháp App OnStartup như:

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" là một trong những hình ảnh trong dự án, và nó "Build Action" là "Tài nguyên".

+2

là một câu hỏi ở đây nơi nào đó? – DeCaf

+0

@DeCaf Tôi đã cập nhật câu hỏi. –

Trả lời

1

Chỉ cần xác định điểm vào của riêng bạn, trước tiên hiển thị màn hình giật gân và sau đó khởi động Prism. Trong thuộc tính dự án của bạn, hãy đặt điểm vào cho điểm vào tùy chỉnh của bạn.

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

     var bootstrapper = ...; 
     bootstrapper....; 
    } 
} 
+0

Vấn đề không phải là về việc xác định điểm vào. WPF tự động tạo ra một Main() tĩnh tạo ra một SplashScreen và sau đó khởi chạy ứng dụng() trong đó tôi tạo bootstrapper của mình. Vấn đề là nếu tôi không chỉ định StartupUri, vì lý do nào đó hình ảnh cho màn hình spash được nhúng dưới dạng tài nguyên không có sẵn cho cá thể SplashScreen. Do đó câu hỏi của tôi: Tôi nên làm gì bằng tay mà thẻ StartupUri đã làm? –

+0

Tác vụ * Xây dựng * trên thuộc tính hình ảnh giật gân của bạn được đặt thành 'Tài nguyên'? –

+0

Boogart No. Hành động xây dựng được đặt thành Splash Screen. –

Các vấn đề liên quan