2011-09-17 29 views
5

Tôi bao gồm một số hình ảnh là "Nội dung" trong XAP được triển khai cho Mango của tôi.Cách liệt kê các hình ảnh được bao gồm dưới dạng "Nội dung" trong XAP?

Tôi muốn liệt kê những điều này khi chạy - có cách nào để thực hiện việc này không?

Tôi đã thử liệt kê các nguồn lực như:

foreach (string key in Application.Current.Resources.Keys) 
{ 
    Debug.WriteLine("Resource:" + key); 
} 

Nhưng những hình ảnh không có trong danh sách. Tôi cũng đã thử sử dụng tài nguyên nhúng thay thế - nhưng điều đó không giúp ích gì. Tôi có thể đọc các luồng bằng cách sử dụng Application.GetResourceStream(uri) nhưng rõ ràng là tôi cần biết tên để thực hiện việc này.

+0

Bạn có thể làm rõ mục đích để thực hiện việc này không? –

+0

Trong trường hợp cụ thể này, chúng có khoảng một trăm biểu tượng mà tôi muốn đặt trước trong bộ nhớ.Tôi không biết, nhưng tôi nghi ngờ điều này sẽ giúp với một vấn đề hiệu suất tôi nhìn thấy. Trong một trường hợp trước (một nhánh của iron7), tôi muốn tải lên một thư mục đầy đủ các tập lệnh ruby ​​khi khởi động. Trong cả hai trường hợp, tôi có thể hardcode các danh sách trong C#, nhưng tôi muốn tránh điều này nếu có một cách - nó sẽ là tuyệt vời nếu tôi chỉ có thể liệt kê bất cứ điều gì được thêm vào thư mục) – Stuart

+0

Tôi không nghĩ rằng bạn sẽ đạt được hiệu suất đáng chú ý tăng từ "tải trước" chúng. Việc xây dựng kiểu nội dung phải đủ nhanh. Ít nhất nó là dành cho tất cả các ứng dụng của tôi. –

Trả lời

1

Không có cách nào để liệt kê các tệp được đặt là "Nội dung".

Tuy nhiên, có một cách để liệt kê tệp trong thời gian chạy, nếu bạn đặt tệp của mình là "Tài nguyên được nhúng".

Đây là cách bạn có thể làm điều này:

  1. Đặt Action xây dựng hình ảnh của mình như "Resource Embedded".
  2. Sử dụng Assembly.GetCallingAssembly().GetManifestResourceNames() để liệt kê tên các nguồn lực
  3. Sử dụng Assembly.GetCallingAssembly().GetManifestResourceStream(resName) để có được những con suối tập tin.

Đây là mã:

public void Test() 
    { 
     foreach (String resName in GetResourcesNames()) 
     { 
      Stream s = GetStreamFromEmbeddedResource(resName); 
     } 
    } 

    string[] GetResourcesNames() 
    { 
     return Assembly.GetCallingAssembly().GetManifestResourceNames(); 
    } 

    Stream GetStreamFromEmbeddedResource(string resName) 
    { 
     return Assembly.GetCallingAssembly().GetManifestResourceStream(resName); 
    } 

EDIT: Như Quetzalcoatl ghi chú khác, nhược điểm của giải pháp này là hình ảnh được nhúng trong DLL, vì vậy nếu bạn một số lượng lớn các hình ảnh, tải ứng dụng thời gian có thể bị ảnh hưởng.

+1

Vâng, nhưng bạn đã quên nói với viêm khớp rằng điều bạn đề xuất có một tác động tiêu cực lớn: EmbeddedResource khiến cho các tệp được lấy EMBEDDED thành DLL kết quả. Với "Nội dung", chúng sẽ được đặt thành các tệp thông thường cùng với tệp DLL. Vì vậy, nếu bạn chuyển khối lượng lớn các tập tin vào "EmbeddedResource" - DLL của bạn sẽ phát triển đáng kể và thời gian khởi động sẽ bị ảnh hưởng. Điểm sử dụng "Nội dung" là làm cho mô-đun nhỏ hơn! Trong khi không có cách nào để liệt kê "nội dung" trên WP7 do các hạn chế về bảo mật, có thể tạo ra một danh sách trong quá trình xây dựng và đọc danh sách trong thời gian chạy. – quetzalcoatl

+0

Đúng vậy, tôi đã chỉnh sửa câu trả lời để làm nổi bật nhược điểm đó. –

4

Đây không phải là API được nướng trong WP7, cho phép bạn liệt kê nội dung của Xap. Bạn cần phải biết tên của các mục nội dung trước khi bạn có thể truy xuất chúng.

Có thể có một số mã nổi xung quanh một nơi nào đó có thể ngửi ra danh mục Zip trong XAP tuy nhiên tôi thực sự khuyên bạn không nên bận tâm. Thay vào đó, hãy bao gồm một số tài nguyên hợp lý như tệp Xml hoặc ResourceDictionary liệt kê chúng.

4

Không tìm thấy cách thực tế nào để đọc các tệp nội dung từ XAP tôi xây dựng danh sách như vậy tại thời điểm thiết kế bằng T4.

Xem ví dụ tại https://github.com/mrlacey/phonegap-wp7/blob/master/WP7Gap/WP7Gap/MainPage.xaml.cs

Điều này có vẻ đúng cách để đi như:
a) Tôi muốn xây dựng danh sách một lần lúc thiết kế chứ không phải là trên tất cả các điện thoại mà cần mã.

b) Tôi không bao giờ nên xây dựng XAP mà không chắc chắn về những tệp tôi đang đưa vào.

Cộng với đó là bước thủ công để đặt hành động xây dựng trên tất cả các tệp như vậy để thêm bước thủ công để "Chạy công cụ tùy chỉnh" một lần cho mỗi công trình không phải là vấn đề đối với tôi.

+1

Đoạn trích tuyệt vời, cảm ơn. – Echilon

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