2012-02-23 7 views
22

Mam kilka obrazów, które chcę być osadzone w exe.Jak odnosić się do zasobów osadzonych z XAML?

kiedy ustawić Konstruowanie Akcja do osadzonego zasobu mam przez cały kod błędu, że zasób nie jest dostępny i prosi mnie, aby ustawić akcji Zbuduj do zasobu

I Wypróbowano kilka różnych metod:

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

Ten kod znajduje się w pliku zasobów. Ale żaden pracował, wszyscy rzucają ten błąd:

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. 

iw różnych miejscach w kodzie uzyskać:

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' 

Więc, co robię źle?

Odpowiedz

17

Po ustawieniu BuildAction do Zasobu idzie jako osadzonego zasobu w zespole. Można również ustawić wartość BuildAction na Zawartość, a następnie zostanie dołączona do wynikowego pliku .xap. Możesz użyć dowolnej z tych BuildActions. Ustawiając BuildAction na Zawartość możesz uzyskać dostęp do obrazu, na przykład: "/Resources/Images/darkaurora.png" (musi zaczynać się od ukośnika). A kiedy używasz BuildAction Resource, możesz uzyskać dostęp do obrazu jako(nazwa_montaży, komponent/ścieżka względna). Mam nadzieję, że to pomoże.

+13

"Zasobów osadzonych" i "Zasobów" są różne. Jeśli spojrzysz na wygenerowany zespół w Reflectorze lub ILSpy, zobaczysz, że są one uwzględniane na różne sposoby. Autor zapytał, jak to zrobić za pomocą "Embedded Resource", a nie "Resource". – BrainSlugs83

+0

@ethicallogics ale co, jeśli trzeba powiązać ten zasób przez viewmodel? Czy istnieje jakaś inna opcja, niż powiązanie ze ścieżką ciągu? –

+0

To niestety nie działa dla BuildAction = Zasób – Nick

2

Ustaw działanie kompilacji do zasobów, nie osadzonego zasobu

+0

Ale chcę, aby był to zasób osadzony. Muszę wdrożyć aplikację bez widocznych obrazów. –

+3

Ustawienie go na zasób osadzi go w zespole – devdigital

+0

lol to nie moje ... –

0

ImageSource nie może być instancja.

public abstract class ImageSource : Animatable, 
IFormattable 

Tam jest ten mały abstract, który będzie cię podrażniał. Twój xaml faktycznie próbuje utworzyć instancję ImageSource, a następnie przypisać wartość w elemencie (twoim Uri, w tym przypadku) do właściwości oznaczonej ContentPropertyAttribute (??) za pomocą dowolnego konwertera, który może być zlokalizowany, aby przekonwertować ciąg na obiekt (znowu, ??).

Myślę, że chcesz BitmapSource.

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

Dlaczego to działa, gdy ustawiam go na zasób? –

+0

@ eric.itzhak: [Uh, naprawdę?] (Http://i.stack.imgur.com/RrKXy.png) – Will

+4

Właściwie to masz jeden błąd, możesz zadeklarować 'ImageSources' w XAML tylko dobrze, ponieważ klasa ma powiązany konwerter [typ] (http://msdn.microsoft.com/en-us/library/cc645047.aspx) (zobacz atrybuty w [the docs] (http://msdn.microsoft.com/ en-us/library/system.windows.media.imagesource.aspx)). Nie mogę powiedzieć, gdzie to jest udokumentowane, ale myślę, że możesz mi zaufać. Ten błąd występuje tylko dlatego, że brakuje wewnętrznego kodu XML tagu. –

Powiązane problemy