2015-11-27 18 views
6

Questa è la mia pagina in progetto portatileimmagini incorporate non mostrano

<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}" /> 

Questo è il mio ImageResourceExtension nel medesimo progetto portatile

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

ho cercato di aggiungere myimage.jpg come incorporato nella radice della mia progetto e nella cartella Risorse, ma nessuna immagine viene mostrata.

Durante il debug, vedo che il file image restituito è di tipo Xamarin.Forms.StreamImageSource. Come posso verificare se questo è veramente trovato?

Qualcuno può individuare l'errore qui?

risposta

8

la correttezza XAML è stato quello di aggiungere il nome dell'applicazione per la fonte.

0

Puoi spiegare un po 'di più l'intento dell'estensione? Supponendo che si sta mettendo le immagini nelle apposite cartelle ('risorse' su iOS, 'Risorse/Drawable' su Android), quindi tutto ciò che serve in XAML è solo:

<Image Source="FeaturedAreaMockup.jpg" /> 

che troverà le immagini nella cartella appropriata e mostrale - perché non lo stai facendo? Qual è il punto dell'estensione?

+2

immagini sono all'interno del progetto condiviso insieme con i file XAML e ViewModel. Non voglio mettere le stesse immagini su ogni progetto. https://developer.xamarin.com/guides/cross-platform/xamarin-forms/working-with/images/#Embedded_Images – Vili

+1

Ah, gotcha. Assicurati di farlo per usi specifici. Ci sono molte volte che vorrai metterli in ogni progetto di piattaforma in modo da avere un supporto per le immagini retina su iOS e supportare immagini di dimensioni diverse (in drawable-hdmi, drawable-xxhdmi, ecc.) Per diverse densità dello schermo (e capacità di memoria) su Android. – SmartyP

+0

Buon punto, grazie – Vili

0

Per leggere beni/cartella di risorse è necessario utilizzare:

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

ImageSource.FromResource utilizza le immagini incluse come EmbeddedResource

Maggiori informazioni qui: https://developer.xamarin.com/guides/cross-platform/xamarin-forms/working-with/images/

+0

Grazie, ma come ho dichiarato I l'immagine è incorporata – Vili

+0

Hai anche menzionato la cartella Risorse, che viene utilizzata per le immagini che vengono recuperate con 'ImageSource.FromFile'. Anche se sarebbe utile. Ora, vedo che usi un progetto separato per le risorse. –

6

Per impostazione predefinita l'immagine avrà Azione di compilazione: Nessuna; questo deve essere impostato su Build Action: EmbeddedResource. clic destro sull'immagine> proprietà> impostare [Costruire Azione: EmbeddedResource] [enter image description here] 1

+1

Anche dopo aver usato il nome dell'app non è stato possibile caricare l'immagine. Impostare l'azione Build era quello che dovevo fare per farlo funzionare. Grazie Osama! – pso

Problemi correlati