2015-11-27 13 views
6

To jest moja strona w przenośnej projektuosadzone obrazy nie wykazujące

<ContentPage xmlns="http://xamarin.com/schemas/2014/forms" 
       xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" 
       xmlns:b="clr-namespace:Corcav.Behaviors;assembly=Corcav.Behaviors" 
       xmlns:local="clr-namespace:MyMobileApp;assembly=MyMobileApp" 
       x:Class="MyMobileApp.MainPage" 
       x:Name="MainPage"> 

     <Image Source="{local:ImageResource myimage.jpg}" /> 

To mój ImageResourceExtension w samym przenośnej projektu

namespace MyMobileApp 
{ 
    [ContentProperty("Source")] 
    public class ImageResourceExtension : IMarkupExtension 
    { 
     public string Source { get; set; } 

     public object ProvideValue(IServiceProvider serviceProvider) 
     { 
      if (Source == null) 
       return null; 

      var imageSource = ImageSource.FromResource(Source); 

      return imageSource; 
     } 
    } 
} 

Próbowałem dodać myimage.jpg jako osadzony w korzeniu mój projekt i folder Zasoby, ale nie widać obrazu.

Podczas debugowania widzę, że zwrócone źródło obrazu jest typu Xamarin.Forms.StreamImageSource. Jak mogę sprawdzić, czy tak naprawdę jest?

Czy ktoś może zauważyć błąd tutaj?

Odpowiedz

8

Prawidłowe XAML było dodanie nazwę aplikacji, aby źródło.

<Image Source="{local:ImageResource MyMobileApp.myimage.jpg}" /> 
0

Czy możesz wyjaśnić nieco cel rozszerzenia? Zakładając, że narażają swoje obrazy w odpowiednich folderach („zasobów” na iOS, „Zasoby/rozciągliwej” na Androida), to wszystko, czego potrzebujesz w XAML jest po prostu:

<Image Source="FeaturedAreaMockup.jpg" /> 

Że znajdzie obrazów w odpowiedni folder i pokaż im - dlaczego tego nie robisz? Jaki jest sens przedłużenia?

+2

Obrazy są wewnątrz wspólnego projektu wraz z plikami XAML i ViewModels. Nie chcę umieszczać tych samych zdjęć na każdym projekcie. https://developer.xamarin.com/guides/cross-platform/xamarin-forms/working-with/images/#Embedded_Images – Vili

+1

Ah, gotcha. Po prostu upewnij się, że robisz to dla konkretnych zastosowań. Istnieje wiele razy, kiedy chcesz umieścić je w każdym projekcie platformy, aby uwzględnić obsługę obrazów siatkówki w systemie iOS i obsługiwać obrazy o różnych rozmiarach (w trybie rysowania-hdmi, losowania-xxhdmi itp.) Dla różnych gęstości ekranu (i zdolności pamięci) na Androida. – SmartyP

+0

Dobra rzecz, dzięki – Vili

0

Aby przeczytać aktywa/folderu zasoby trzeba użyć:

ImageSource.FromFile("myimage.jpg");' 

ImageSource.FromResource wykorzystuje obrazy zawarte jako EmbeddedResource

więcej tutaj: https://developer.xamarin.com/guides/cross-platform/xamarin-forms/working-with/images/

+0

Dzięki, ale jak powiedziałem, obraz jest osadzony – Vili

+0

Wspomniałeś także o folderze Zasoby, który jest używany do obrazów, które są pobierane z 'ImageSource.FromFile'. Chociaż byłoby to przydatne. Teraz widzę, że używasz oddzielnego projektu dla zasobów. –

6

Domyślnie obraz będzie miał działanie budowy: brak; to musi być ustawione na Build Action: EmbeddedResource. prawym przyciskiem myszy na obrazek> Właściwości> ustaw [Budowanie Działanie: EmbeddedResource] [enter image description here] 1

+1

Nawet po użyciu nazwy aplikacji nie mogłem załadować obrazu. Ustawienie akcji budowania było tym, co musiałem zrobić, aby ją uruchomić. Dzięki Osama! – pso

Powiązane problemy