Skip to content

Instantly share code, notes, and snippets.

@conceptdev
Created June 9, 2014 23:06
Show Gist options
  • Save conceptdev/d906c4538a137932fcf6 to your computer and use it in GitHub Desktop.
Save conceptdev/d906c4538a137932fcf6 to your computer and use it in GitHub Desktop.
Xamarin.Forms custom markup extension because there is no built-in TypeConverter for Images embedded as resources
using System;
using Xamarin.Forms.Xaml;
using Xamarin.Forms;
namespace WorkingWithImages
{
// You exclude the 'Extension' suffix when using in Xaml markup
[ContentProperty ("Source")]
public class ImageResourceExtension : IMarkupExtension
{
public string Source { get; set; }
public object ProvideValue (IServiceProvider serviceProvider)
{
if (Source == null)
return null;
// Do your translation lookup here, using whatever method you require
var imageSource = ImageSource.FromResource(Source);
return imageSource;
}
}
}
<?xml version="1.0" encoding="UTF-8" ?>
<ContentPage
xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:local="clr-namespace:WorkingWithImages;assembly=WorkingWithImages"
x:Class="WorkingWithImages.EmbeddedImagesXaml">
<ContentPage.Padding>
<OnPlatform x:TypeArguments="Thickness">
<OnPlatform.iOS>0, 20, 0, 0</OnPlatform.iOS>
</OnPlatform>
</ContentPage.Padding>
<StackLayout VerticalOptions="Center" HorizontalOptions="Center">
<Label Text="Image Resource Xaml" />
<!-- uses a custom Extension defined in this project for now -->
<Image Source="{local:ImageResource WorkingWithImages.beach.jpg}" />
<Label Text="WorkingWithImages.beach.jpg embedded resource" />
</StackLayout>
</ContentPage>
@eltiare
Copy link

eltiare commented Oct 19, 2017

I can't get this to work on Android or iOS, either. :(

@vcartera81
Copy link

this code just doesn't work for me. I did not get a breakpoint hit neither in the get/set of the property nor in the ProvideValue method

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment