2016-06-02 3 views
0

Я пытаюсь следовать документации Xamarin о внедренных изображений: https://developer.xamarin.com/guides/xamarin-forms/working-with/images/#Embedded_ImagesEmbeddedImage в Xamarin формах: как связать его в XAML

Это фрагмент кода, который я использую в моем портативном применении:

var embeddedImage = new Image { Aspect = Aspect.AspectFit }; 
embeddedImage.Source = ImageSource.FromResource("<MyNamespace>.<MyFolder>.imageFileName.jpg"); 

listItem.EmbeddedImage = embeddedImage; 

Теперь я пытаюсь связать его в XAML, как часть ListView (примечание:<Image Source="{Binding EmbeddedImage}" /> часть, вероятно, неправильно):

<ListView x:Name="listView"> 
    <ListView.ItemTemplate> 
    <DataTemplate> 
     <ViewCell> 
     <StackLayout BackgroundColor="#eee" 
     Orientation="Vertical"> 
      <StackLayout Orientation="Horizontal"> 
      <Image Source="{Binding EmbeddedImage}" /> // This is most likely wrong since it doesn't work  
      </StackLayout> 
     </StackLayout> 
     </ViewCell> 
    </DataTemplate> 
    </ListView.ItemTemplate> 
</ListView> 

Я тестировал это с помощью <Image Source="{Binding ImageUrl}" />, и он работает, поэтому остальная часть кода работает так, как должна.


Edit:

Кто-то предложил этот пост в качестве решения:

How to load an image to a ImageCell on Xamarin.Forms?

Но принятый ответ был:

Изображения идут в ваш «родные» проекты

... но на самом деле документация Xamarin говорит, что это можно сделать внутри портативного проекта (так что вам не нужно будет копировать одни и те же изображения/значки через все «родные» проекты).

Я знаю, что поместить их в каждый подпроект, вероятно, сработает, но это не вопрос моего вопроса.

+0

Возможный дубликат [Как загрузить изображение в ImageCell на Xamarin.Forms?] (Http://stackoverflow.com/questions/37489748/how-to-load-an-image-to-a -imagecell-on-xamarin-forms) – SushiHangover

+0

@SushiHangover Ваш ответ в возможном дублирующем сообщении был «Образы идут в ваши« родные »проекты». Но похоже, что их перенос в переносной проект возможен, поскольку он подробно описан в документации: https://developer.xamarin.com/guides/xamarin-forms/working-with/images/#Embedded_Images. Кроме того, похоже, что я не единственный, кто разочарован этой проблемой: https://forums.xamarin.com/discussion/20585/how-to-load-embedded-image-resource-in-pcl-assembly –

+1

Использование этого метода требует, чтобы вы использовали тип сборки 'EmbeddedResource' и который находится в вашем проекте/сборке' Xamarin.Form'. Что касается производительности и потребления ресурсов, я бы рекомендовал использовать встроенное связывание и встраивание сборки ... (Это также было рассмотрено во время разговора Джейсона Смита «Эволюция»). – SushiHangover

ответ

0

Вы можете получить доступ к ресурсу непосредственно в xaml с помощью pack://application uri.

<ListView x:Name="listView"> 
    <ListView.ItemTemplate> 
    <DataTemplate> 
     <ViewCell> 
     <StackLayout BackgroundColor="#eee" 
     Orientation="Vertical"> 
      <StackLayout Orientation="Horizontal"> 
      <Image Source="pack://application:,,,/{AssemblyName};component/Images/MyImage.png" />  
      </StackLayout> 
     </StackLayout> 
     </ViewCell> 
    </DataTemplate> 
    </ListView.ItemTemplate> 
</ListView> 
+0

Кажется, я не могу заставить его работать. Я поместил свой 'test.png' в корень проекта, помеченный как« Embedded Resource ». Затем я использую '', и приложение просто ничего не показывает. –

+1

Вам нужно добавить '; component', так как это корень вашего проекта. Каждая следующая строка между '\' представляет собой вложенную папку. А также вы можете сделать фрагмент того, как выглядит ваша структура проекта? –

+0

Я тоже тестировал с '; компонентом, и это не сработало. Вот структура проекта: http://i.imgur.com/8f6Sai6.png?1 –

Смежные вопросы