2012-02-23 25 views
22

Tôi có một số hình ảnh mà tôi muốn được nhúng vào exe.Làm cách nào để tham khảo Tài nguyên đã nhúng từ XAML?

Khi tôi đặt Build Action để Embedded Resource tôi nhận được thông qua ra các mã lỗi rằng tài nguyên là không có sẵn và yêu cầu tôi thiết lập các hành động xây dựng để Resource

tôi Đã thử một số phương pháp khác nhau:

<ImageSource x:Key="Image_Background">YearBook;component/Resources/Images/darkaurora.png</ImageSource> 

<ImageSource x:Key="Image_Background">Images/darkaurora.png</ImageSource> 

<ImageSource x:Key="Image_Background">pack://application:,,,/Resources/Images/darkaurora.png</ImageSource> 

Mã này nằm trong tệp Tài nguyên. Nhưng không ai làm việc, tất cả họ đều ném lỗi này:

Cannot convert the string 'pack://application:,,,/Resources/Images/darkaurora.png' into a 'System.Windows.Media.ImageSource' object. Cannot locate resource 'resources/images/darkaurora.png'. Error at object 'Image_Background' in markup file 'YearBook;component/Resources/ImageResources.xaml' Line 4 Position 6. 

Và ở những nơi khác nhau trong mã tôi nhận được:

the file 'YearBook;component/Resources/Images/shadowdrop.png' is not a part of the project or its 'Build Action' property is not set to 'Resource' 

Vì vậy, am i làm gì sai?

Trả lời

17

Khi bạn đặt BuildAction để Resource nó đi như nguồn nhúng trong một lắp ráp. Hoặc bạn có thể đặt BuildAction thành Nội dung sau đó nó sẽ được nhóm vào tệp .xap kết quả. Bạn có thể sử dụng bất kỳ một trong các BuildActions này. Bằng cách đặt BuildAction đến Nội dung bạn có thể truy cập Hình ảnh như: "/Resources/Images/darkaurora.png" (phải bắt đầu bằng dấu gạch chéo). Và khi bạn sử dụng Tài nguyên xây dựng hành động thì bạn có thể truy cập hình ảnh dưới dạng "YearBook;component/Resources/Images/darkaurora.png" (tên assembly; thành phần/đường dẫn). Hy vọng điều này sẽ giúp.

+13

"Tài nguyên được nhúng" và "Tài nguyên" khác nhau. Nếu bạn nhìn vào hội đồng được tạo ra trong Reflector hoặc ILSpy bạn sẽ thấy rằng chúng được bao gồm trong nhiều cách khác nhau. Tác giả hỏi làm thế nào để làm điều đó với "Tài nguyên nhúng", không phải "Tài nguyên". – BrainSlugs83

+0

@ethicallogics nhưng nếu cần phải ràng buộc tài nguyên này qua viewmodel thì sao? Có tùy chọn nào khác ngoài liên kết với đường dẫn chuỗi không? –

+0

Điều này thật đáng buồn không hoạt động cho BuildAction = Resource – Nick

2

Đặt hành động xây dựng thành Tài nguyên, không phải Tài nguyên được nhúng

+0

Nhưng tôi muốn nó là tài nguyên được nhúng. tôi cần triển khai ứng dụng mà không thấy hình ảnh. –

+3

Đặt nó thành một Tài nguyên sẽ nhúng nó vào assembly – devdigital

+0

lol nó không phải của tôi ... –

0

ImageSource không thể được khởi tạo.

public abstract class ImageSource : Animatable, 
IFormattable 

Có ít số abstract trong đó sẽ làm hỏng ngày của bạn. Xaml của bạn thực sự đang cố gắng khởi tạo một thể hiện của ImageSource, sau đó gán giá trị trong phần tử (Uri của bạn, trong trường hợp này) cho một thuộc tính được đánh dấu bằng ContentPropertyAttribute (??) bằng cách sử dụng bất kỳ trình chuyển đổi nào có thể được định vị để chuyển đổi chuỗi thành một đối tượng (một lần nữa, ??).

Tôi nghĩ bạn muốn có một BitmapSource.

<BitmapImage 
    x:Key="Image_Background" 
    UriSource="/Images/darkaurora.png" /> 
+0

Vậy tại sao nó hoạt động khi tôi đặt nó vào Tài nguyên? –

+0

@ eric.itzhak: [Uh, thực sự?] (Http://i.stack.imgur.com/RrKXy.png) – Will

+4

Thực ra bạn đã sai cái này, bạn có thể khai báo 'ImageSources' trong XAML chỉ vì lớp có một [loại chuyển đổi] (http://msdn.microsoft.com/en-us/library/cc645047.aspx) liên kết với nó (xem các thuộc tính trong [tài liệu] (http://msdn.microsoft.com/ en-us/library/system.windows.media.imagesource.aspx)). Không thể cho bạn biết nơi đó là tài liệu nhưng tôi nghĩ rằng bạn có thể tin tưởng tôi về điều đó. Bạn nhận được lỗi đó chỉ vì thiếu XML bên trong của thẻ. –

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